gpt4 book ai didi

scala - 使用 play-slick 1.0 在 play 2.4 中创建表

转载 作者:行者123 更新时间:2023-12-04 19:58:30 26 4
gpt4 key购买 nike

我启动并运行了 play-slick 模块,并且还在使用进化来在应用程序启动期间在数据库中创建所需的表。

为了使进化起作用,需要编写 1.sql包含我要创建的表定义的脚本。目前它看起来像这样:

# --- !Ups

CREATE TABLE Users (
id UUID NOT NULL,
email varchar(255) NOT NULL,
password varchar(255) NOT NULL,
firstname varchar(255),
lastname varchar(255),
username varchar(255),
age varchar(255),
PRIMARY KEY (id)
);

# --- !Downs

DROP TABLE Users;

到目前为止一切顺利,但要让 Slick 正常工作,它还需要知道我的表的定义。所以我有一个 UserDAO看起来像这样的对象:
class UserDAO @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) extends HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._

private val Users = TableQuery[UsersTable]

def all(): Future[Seq[User]] = db.run(Users.result)

def insert(user: User): Future[User] = db.run(Users += user).map { _ => user }

//Table definition
private class UsersTable(tag:Tag) extends Table[User](tag,"users"){
def id = column[UUID]("id", O.PrimaryKey)
def email = column[String]("email")
def password = column[String]("password")
def firstname = column[Option[String]]("firstname")
def lastname = column[Option[String]]("lastname")
def username = column[Option[String]]("username")
def age = column[Int]("age")

def * = (id, email,password,firstname,lastname,username,age) <> ((User.apply _).tupled, User.unapply)
}
}

我现在基本上在两个不同的地方有相同的表定义。一旦进入 1.sql脚本和一次在 UserDAO 类中。

我真的一点都不喜欢这个设计!在两个不同的地方拥有相同的表定义似乎是不对的。

有什么方法可以从 UserDAO 类中的表定义生成进化脚本吗?或者是否有完全不同的方式在启动期间生成表定义(可能只使用 slick)?我真的很想只使用光滑的表定义并摆脱烦人的 SQL 脚本。

我正在使用 play-2.4play-slick-1.0
非常感谢。

最佳答案

好问题 - 我和你在同一条船上!

我只有 DAO 和这段代码:

TableQuery[UsersTable].schema.create

这将为您创建数据库表。不需要 .sql .

相应地,要删除,请使用 .drop而不是 .create .

您还可以使用 reduceLeft 组合创建多个表。 .这是我的做法:
lazy val allTables = Array(
TableQuery[AcceptanceTable].schema,
[... many more ...]
TableQuery[UserTable].schema
).reduceLeft(_ ++ _)

/** Create all tables in database */
def create = {
allTables.create
}

/** Delete all tables in database */
def drop = {
allTables.drop
}

所有这些都需要范围内的驱动程序 API,例如:
val profile = slick.driver.H2Driver
import profile.api._

关于scala - 使用 play-slick 1.0 在 play 2.4 中创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com