代码之家  ›  专栏  ›  技术社区  ›  Jeremy DeGroot

论与山药的一对二关系

  •  3
  • Jeremy DeGroot  · 技术社区  · 15 年前

    我正在进行我的第一个symfony项目,我遇到了一个障碍。我想用两个玩家来表达一个游戏。我想要的关系是playerone和playertwo,每个都被键入用户表中的一个ID。这是我目前所掌握的部分内容:

    Game:
      actAs: { Timestampable:- }
      columns:
        id: { type: integer,  notnull: true, unique: true }
        startDate: { type: timestamp, notnull: true }
        playerOne: { type: integer, notnull: true }
        playerTwo: { type: integer, notnull: true }
        winner: { type: integer, notnull:true, default:0 }
      relations:
        User: { onUpdate: cascade, local: playerOne, foreign: id}
        User: { onUpdate: cascade, local: playerTwo, foreign: id}
    

    那不管用。它构建得很好,但它生成的SQL只包含playertwo的约束。我试过其他一些方法:

    User: { onUpdate: cascade, local: [playerOne, playerTwo], foreign: id}
    

    也:

        User: [{ onUpdate: cascade, local: playerOne, foreign: id}, { onUpdate: cascade, local: playerTwo, foreign: id}]
    

    当我尝试构建时,最后两个会抛出错误。有没有人知道我在做什么,能帮助我实现它?

    2 回复  |  直到 15 年前
        1
  •  6
  •   Alexander Konstantinov    15 年前

    尝试不同的关系名称:

      relations:
        UserOne: { onUpdate: cascade, local: playerOne, foreign: id, class: User }
        UserTwo: { onUpdate: cascade, local: playerTwo, foreign: id, class: User }
    

    已编辑:还请注意添加了“class:user”参数,该参数明确说明了关系的类型。

        2
  •  1
  •   Tom    15 年前

    如果您说$game->getuser(),则不清楚您指的是哪个用户。因为它们引用同一个表,所以需要为这两个关系指定不同的名称,并为它们声明两个不同的foreignalias。基本上,您的游戏表需要能够引用具有不同名称(例如userone、usertwo)的每个关系,反之亦然。否则它会混淆教义,关系也不会建立正确。

    我之前也遇到过类似的问题…在构建模型之后,使用MySQLWorkbench生成模式的可视化表示,有助于确保关系完全符合需要。

    希望有帮助。