+1 امتیاز
قبل در برنامه نویسی توسط (2.6هزار امتیاز)
ویرایش شده قبل توسط

برای استفاده از slick بر روی play scala طبق مستندات موجود ، نیاز به تعریف یک جدول در قالب کلاس است

برای مثال جدول زیر 

private class CatsTable(tag: Tag) extends Table[Cat](tag, "CAT") {

    def name = column[String]("NAME", O.PrimaryKey)
    def color = column[String]("COLOR")

    def * = (name, color) <> (Cat.tupled, Cat.unapply _)
  }

که در این جدول schema مربوط به یک جدول معرفی می شود.

آیا این قابلیت وجود دارد که این جدول در صورت عدم وجود به صورت خودکار ساخته شود؟

دیتابیس هم "mysql" % "mysql-connector-java" % "5.1.34" هستش.

به این نکته توجه کنید که به دلیل تعداد زیاد جداول تعریف evolution برای تک تک جداول کار سختیه و به دلیل این که از sql استفاده می کنه در صورتی که بخوایم انتقال به یک دیتابیس دیگه داشته باشیم ممکنه با مشکل مواجه بشیم.

1 پاسخ

+1 امتیاز
قبل توسط (112 امتیاز)

شما می تونید موقع اجرا اسم جداول موجود رو از دیتابیس بگیرید و بعد جدول هایی که ساخته نشدن رو ایجاد کنید.

یه راه برای پیدا کردن جداول استفاده از MTable هست. مثلا:

import slick.jdbc.meta.MTable

db.run {
  MTable.getTables.map { tables =>
    tables.foreach(println(_))
  }
}

مثال کامل:

 

val tables = Seq(
  TableQuery[TableName1],
  TableQuery[TableName2],
  TableQuery[TableName3]
)

db.run {
  MTable.getTables.flatMap { existing =>
    val names = existing.map(t => t.name.name).toSet
    val tablesToBeCreated = tables.filterNot(t => names.contains(t.baseTableRow.tableName))
    DBIO.sequence(tablesToBeCreated.map(_.schema.create))
  }
}

 

سوالات مشابه

0 امتیاز
0 پاسخ 334 بازدید
+1 امتیاز
2 پاسخ 369 بازدید
0 امتیاز
1 پاسخ 342 بازدید
+1 امتیاز
0 پاسخ 211 بازدید
+1 امتیاز
1 پاسخ 348 بازدید
+1 امتیاز
0 پاسخ 932 بازدید
...