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

Jos*_*kin 1 doctrine

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

假设我有这个:

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

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

提前谢谢你的帮助..

Pat*_*and 5

使用自引用相等的嵌套关系.

来自文档:

平等关系

等嵌套关系非常适合表示类引用自身和引用类中的列相等的关系.

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

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

// 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
            )
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是YAML格式的相同示例.您可以在YAML Schema> Files章节中阅读有关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
Run Code Online (Sandbox Code Playgroud)