在同一个班级中,许多人都是教条

时间:2009-12-30 22:00:27

标签: doctrine

我正在尝试在我正在构建的应用中创建类似社交网络的功能,并希望将朋友与其他朋友关联。

假设我有这个:

Friend:
  connection: doctrine
  tableName: friend
  columns:
    id:
      type: integer(8)
      primary: true
      autoincrement: true
    name:
      type: string(75)
      notnull: true

如何创建多对多关系以将朋友与自己联系起来?

提前感谢您的帮助..

1 个答案:

答案 0 :(得分:5)

Use self-referencing equal nest relations

来自文档:

  

平等关系

     

平等关系是完美的   适合表达关系   一个类引用自身和   引用类中的列   是平等的。

     

这意味着在获取相关时   记录哪个列无关紧要   在引用类中有主要的   主类的关键价值。

     

前面的条款可能很难   明白了,让我们举个例子。我们   定义一个名为User的类,它可以   有很多朋友。请注意我们如何   使用'相等'选项。

     

// models / User.php

class User extends BaseUser
{
    public function setUp()
    {
        parent::setUp();

        // ...

        $this->hasMany('User as Friends', array(
                'local'    => 'user1',
                'foreign'  => 'user2',
                'refClass' => 'FriendReference',
                'equal'    => true,
            )
        );
    }
}
// models/FriendReference.php
class FriendReference extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('user1', 'integer', null, array(
                'primary' => true
            )
        );

        $this->hasColumn('user2', 'integer', null, array(
                'primary' => true
            )
        );
    }
}
  

以下是YAML格式的相同示例。您可以在YAML架构中了解有关YAML的更多信息>档案章节:

---
# schema.yml

# ...
User:
# ...
  relations:
    # ...
    Friends:
      class: User
      local: user1
      foreign: user2
      refClass: FriendReference
      equal: true

FriendReference:
  columns:
    user1:
      type: integer
      primary: true
    user2:
      type: integer
      primary: true