我正在使用CakePHP 3.4
我正在检索用户的信息,如
$user = $this->Users->get($id, [
'contain' => [
'UserAddresses.States.Countries' => ['conditions' => [
'UserAddresses.deleted' => false]],
],
]);
此处,UserAddresses
有user_id
列,state_id
列和States
表格有country_id
列。
如果表中没有关联的user_address,那么我给出
record not found
错误
从States.Countries
删除contain
即使UserAddresses
编辑2:关系
UsersTable.php
$this->hasOne('UserAddresses', [
'foreignKey' => 'user_id'
]);
UserAddressesTable.php
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
$this->belongsTo('States', [
'foreignKey' => 'state_id',
'joinType' => 'INNER'
]);
StatesTable.php
$this->belongsTo('Countries', [
'foreignKey' => 'country_id',
'joinType' => 'INNER'
]);
$this->hasMany('UserAddresses', [
'foreignKey' => 'state_id'
]);
CountriesTable.php
$this->hasMany('States', [
'foreignKey' => 'country_id'
]);
答案 0 :(得分:3)
正如Kilian Schuster所说,你的病情适用于Countries
。我改变了它,试试下面的代码:
$user = $this->Users->get($id, [
'contain' => [
'UserAddresses' => [
'conditions' => [
'UserAddresses.deleted' => false
]
],
'UserAddresses.States.Countries'
]
]);
编辑:如果没有与获取用户相关的地址,则
record not found
错误可能是由于状态中的国家/地区的Inner join
类型造成的。如果关系是可选的,请将联接类型更改为Left
。
答案 1 :(得分:0)
使用这种语法,您实际上是在尝试将条件应用于“Countries”模型,而不是“UserAddresses”模型。