【问题标题】:How to set up intermediary table in MySQL for ManyToMany relations in squeryl for Play 2 framework?如何在 MySQL 中为 Play 2 框架的 squeryl 中的多对多关系设置中间表?
【发布时间】:2012-12-12 15:17:57
【问题描述】:

我仍在学习 Web 开发、scala、play 2.0 和 squeryl 的所有细节,我正在尝试在我的两个表之间建立多对多关系。

我查看了找到 here 的信息,但我在使用中间表时遇到了问题。我已经看遍了,我找不到一个很好的例子来说明它应该如何构建。

我正在为我的数据库使用 MySQL,并且我尝试在中间表中使用外键和主键,但都没有奏效,或者我做错了。那么,有人可以给我一个明确的例子来说明中间表的外观吗?

稍微了解一下,我想关联的两张表的基本结构如下。

tableOne (
  name varchar(255)
);

tableTwo (
  name varchar(255),
  idCode varchar(255)
);

它们将通过 tableOne 中的名称和 tableTwo 中的 idCode 相关联,这只是 tableTwo 名称列的缩写形式。

那么使用 MySQL、squeryl 和链接中显示的格式,有人可以帮我完成吗?

【问题讨论】:

    标签: mysql scala many-to-many playframework-2.0 squeryl


    【解决方案1】:

    要关联这两个表,您需要在架构中建立多对多关系。假设您在架构中定义了名称为 tableOne 和 tableTwo 的表,可能是您想要的:

    首先创建一个连接两个表的类:

    class TableOneToTwo(
      name:String = "",
      idCode:String = "") extends KeyedEntity[CompositeKey2[String, String]] {
      def id = compositeKey(name, idCode)
    }
    

    然后在你的 Schema 中映射关系

    val tableOneToTwo = manyToManyRelation(tableOne, tableTwo).via[TableOneToTwo]((t1, t2, jt) => (t1.name === jt.name, t2.idCode === jt.idCode)) 
    

    然后你只需要在你的数据库中创建相应的表——它应该有两个字段——nameid_code(根据你的命名约定命名)。

    如果您需要参考,这应该为您指明正确的方向:http://squeryl.org/relations.html

    【讨论】:

    • 这比我想象的要简单得多,非常感谢!
    • 不客气。如果这解决了问题,请随时接受答案。如果还有其他问题,尽管问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多