2009-12-30 56 views
1

我正在嘗試在我正在構建的應用中創建類似於社交網絡的功能,並且希望將朋友與另一個朋友關聯。在同一類別上多對多的學說

假設我有這樣的:

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

如何創建一個多對多的關係,朋友與自己相關聯?提前對您有所幫助

謝謝..

回答

5

Use self-referencing equal nest relations

從文檔:

平等鳥巢關係

平等巢關係是完全 適合表達關係 哪裏自身和參考類 內的類引用 的列等於。

這意味着,當取得被相關 記錄不要緊哪一列 在參考類具有主類的主 鍵值。

以上條款可能難以理解,所以下面舉個例子。我們 定義了一個叫做User的類,它可以有 有很多朋友。請注意我們 如何使用'平等'選項。

//模型/ 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 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