【问题标题】:Doctrine: Define many-to-many relation inline in fixture教义:在夹具中定义多对多关系内联
【发布时间】:2011-04-08 07:29:47
【问题描述】:

我想知道在 Doctrine Fixture 中内联定义多对多关系的正确方法。以sfDoctrineGuardPlugin 为例。架构可以找到here

我正在定义一个夹具,例如: 我在 sfGuardGroup 表中已经有 2 个组,所以我希望引用 group_id

sfGuardUser:
  soc-sfUser-1:
    first_name: Mrs
    last_name: Balasubramanium
    email_address: balasubramanium@gmail.com
    username: balasubramanium@gmail.com
    password: admin
    Groups: [{group_id: 2}]
    is_active: 1

这是正确的吗?

【问题讨论】:

    标签: symfony1 doctrine foreign-key-relationship fixtures


    【解决方案1】:

    如果您还定义了该夹具中的组,则可以按名称引用它们:

    sfGuardGroup:
      GroupAdmin:  ...
      GroupEditor:  ...
    
    sfGuardUser:
      ...
      Groups: [GroupEditor]
    

    如果你想指定一个实际的 ID,你应该这样写:

    sfGuardUser:
      foo:
        first_name:     Foo
        last_name:      Bar
        ...
        sfGuardUserGroup: [{group_id: 2}]
    

    为什么?如果您查看 sfDoctrineGuardPlugin 的 schema.yml 文件,您可以在 sfGuardUser 关系上看到 refClass 属性:

    relations:
      Groups:
        ...
        refClass: sfGuardUserGroup
    

    这有点棘手,并且在 Doctrine 中没有很好的记录,但它似乎有效。

    【讨论】:

    • 是的,知道这一点。但是我的组是在用户之前加载的(不在同一个数据中:加载任务或事务),所以我需要使用静态 ID 来引用组。还是谢谢
    • @Prasad 我想我找到了解决方案。至少在我做的一些测试中它对我有用。
    • 非常感谢!希望根据您的第一个回复,Groups: [ { name: Test Group} ] 也可以使用
    • @Prasad 有趣...我找不到关于它如何使用name 链接对象而不是 id 的解释。是我还是 Doctrine 文档没有完成所有这些事情?
    • @elitalon:不是真的。它有一个解释。当您使用 Groups 引用时,它期望引用一个组或创建一个内联对象。所以 Groups: [GroupEditor] 和 Groups: [{name: GroupEditorName}] 都可以工作。在后者中,对象是内联定义的,没有引用。所以它不能在另一个模型中引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2011-10-09
    相关资源
    最近更新 更多