我正在尝试在我正在构建的应用中创建类似社交网络的功能,并希望将朋友与其他朋友关联。
假设我有这个:
Friend:
connection: doctrine
tableName: friend
columns:
id:
type: integer(8)
primary: true
autoincrement: true
name:
type: string(75)
notnull: true
如何创建多对多关系以将朋友与自己联系起来?
提前感谢您的帮助..
答案 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