2015-12-30 31 views
0

作爲一個光滑的noob我不明白爲什麼我必須指定我的模型兩次,首先在斯卡拉,然後在1.sql創建表。這看起來不幹。有沒有一種簡單的方法可以在開發過程中從模型生成1.sql(和2..n.sql)?從模型生成1.sql的簡單方法?

+0

我用過光滑的2.0。我不知道什麼是「1.sql」。 我已經使用$ {tableName} .ddl.create創建表。 – nikiforo

+0

DDL是要搜索的關鍵字。它在3.0中被刪除。 – Hans

回答

1

我創建了自己SBT任務使用代碼生成容易生成模型1.SQL:在build.sbt文件

val generate_schema = taskKey[Unit]("Schema Generator") 

generate_schema <<= (fullClasspath in Runtime) map {classpath => 
    val loader: ClassLoader = ClasspathUtilities.toLoader(classpath.map(_.data).map(_.getAbsoluteFile)) 
    val schemaGenerator = loader.loadClass("misc.SchemaGenerator").newInstance().asInstanceOf[Runnable] 
    schemaGenerator.run 
} 

的misc.SchemaGenerator類:

package misc 

import models.Article 
import models.Category 
import play.api.Logger 
import slick.driver.PostgresDriver.api._ 
import scala.concurrent._ 
import ExecutionContext.Implicits.global 
import scala.reflect.io.File 

class SchemaGenerator extends Runnable { 

    def run = { 
    println("---------------------GENERATING SCHEMA.....") 
    val categories = TableQuery[Category] 
    val articles = TableQuery[Article] 

    val file = File("/home/pedro/NetBeansProjects/play-scala-angular-sample/my-blog-server/conf/evolutions/default/1.sql") 

    val sb = new StringBuilder("# --- !Ups \n\n") 
    categories.schema.create.statements.foreach(st => sb.append(st.toString + ";\n")) 
    sb.append("\n\n") 
    articles.schema.create.statements.foreach(st => sb.append(st.toString + ";\n")) 

    sb.append("\n\n") 
    sb.append("# --- !Downs") 
    sb.append("\n\n") 

    categories.schema.drop.statements.foreach(st => sb.append(st.toString + ";\n")) 
    sb.append("\n\n") 
    articles.schema.drop.statements.foreach(st => sb.append(st.toString + ";\n")) 

// Logger.info("value: [" + sb + "] sb") 
    file.writeAll(sb.toString) 
    Logger.info("----------------------FINISHED GENERATING SCHEMA--------------------------") 
    } 

} 

您可以從激活控制檯執行任務:generate_schema

希望它有幫助。