2015-12-28 62 views
1

我有一個特定的請求,建立用戶之間的關聯。這使我感到困惑,如何減少重複關聯,查詢和結果?CakePHP 3 - 用戶belongsToMany用戶

起點看起來像這樣嗎?

// UsersTable 
$this->belongsToMany('Users', [ 
      'through' => 'Connections', 
     ]); 

如何獲取所有的關聯在一個查詢中,不論「user_from」或「user_to」字段是否用戶關鍵的?

enter image description here

回答

3

有關使用別名如何?

users表:

class UsersTable extends Table 
{ 

    public function initialize(array $config) 
    { 
     $this->hasMany('ToConnections', [ 
      'className' => 'Connections', 
      'foreignKey' => 'user_to' 
     ]); 

     $this->hasMany('FromConnections', [ 
      'className' => 'Connections', 
      'foreignKey' => 'user_from' 
     ]); 

    } 
} 

而且你connections表:

class ConnectionsTable extends Table 
{ 

    public function initialize(array $config) 
    { 
     $this->belongsTo('ToUsers', [ 
      'className' => 'Users', 
      'foreignKey' => 'user_to' 
     ]); 

     $this->belongsTo('FromUsers', [ 
      'className' => 'Users', 
      'foreignKey' => 'user_from' 
     ]); 

    } 
} 

然後可以使用contain()根據需要加載相關的模型。

$query = $conections->find()->contain([ 
    'ToUsers', 
    'FromUsers' 
]); 

$recipients = TableRegistry::get('users'); 
$query = $recipients->find()->contain([ 
    'ToConnections.FromUsers', 
]); 
+0

更正,爲您的關係使用別名將是最好的用例。 –

+0

我想到了這種方法。但是這給了我們兩個協會。結果應按照日期排序 – Salines

+0

@Salines'$ connections-> find()'應該允許您通過'date','user_from'或'user_to'進行搜索。 –