چگونه می توان در slick به طور خودکار جداول نا موجود را ایجاد کرد؟

+1 رأی
میانگین بازدید روزانه 0.0986 بازدید

برای استفاده از 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 استفاده می کنه در صورتی که بخوایم انتقال به یک دیتابیس دیگه داشته باشیم ممکنه با مشکل مواجه بشیم.

سوال 2 سال قبل در تالار برنامه نویسی توسط moeenzarrinfam (2,569 امتیاز)
ویرایش 2 سال قبل توسط Saeed Zarinfam

1 جواب

+1 رأی

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

یه راه برای پیدا کردن جداول استفاده از 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))
  }
}

 

جواب 2 سال قبل توسط Ahmad Mozafarnia (112 امتیاز)

سوال های مشابه

0 رأی
0 جواب میانگین بازدید روزانه 0.0865 بازدید
+1 رأی
2 جواب میانگین بازدید روزانه 0.0872 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0772 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.0334 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.0560 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.17169 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.35428 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.32673 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.23528 بازدید
کانال تلگرام جواب یاب
...