2016-01-31 23 views
0

我的用戶可以有很多地址,所以我用hasMany關聯。當他們登錄時,它完美地工作,我可以訪問地址。我試圖定義一個默認使用的MainAddress,但是當他們登錄我的自定義Auth finder時忽略我的hasOne關聯,並且不會返回任何錯誤。用戶有許多地址和用戶有自定義身份驗證登錄

// in UserTable.php 
$this->hasMany('Addresses', [ 
    'className' => 'Addresses', 
    'foreignKey' => 'user_id' 
]); 

$this->hasOne('MainAddress', [ 
    'className' => 'Addresses', 
    'foreignKey' => 'user_id', 
    'conditions' => ['is_main' => true] 
]); 

// ... 
public function findAuth(\Cake\ORM\Query $query, array $options) 
{ 
    $query 
    ->select(['id', 'email', 'password']) 
    ->contain(['Addresses', 'MainAddress']); 

    return $query; 
} 

我仍然得到所有的地址與$_user->addresses,但在我的會議最主要的是未上市(沒有$_user->main_address)。

回答

0

該問題是由於您擁有select()而引起的。您需要在列表中包含hasOne關聯表的字段(因爲它進行了連接)。

+0

它的工作,非常感謝!但我不明白爲什麼它會與「hasMany」合作,而不是與「hasOne」合作。 –

+0

由於使用單獨的查詢獲取的hasMany關聯記錄和針對主查詢完成的select()不影響它。 – ADmad

相關問題