我的用户可以有很多地址,所以我使用了has很多关联。当他们登录时,它运行良好,我可以访问这些地址。我试图定义一个将用作默认值的主地址,但是当他们登录我的自定义身份验证查找器时,忽略我的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(CakeORMQuery $query, array $options)
{
$query
->select(['id', 'email', 'password'])
->contain(['Addresses', 'MainAddress']);
return $query;
}
我仍然得到所有带有$_user->addresses
的地址,但主地址没有在我的会话中列出(没有$_user->main_address
)。
该问题是由于您select()
引起的。您还需要在列表中包含hasOne关联表的字段(因为它执行连接)。