在CakePHP 3中包含模型时找不到记录

时间:2017-04-19 11:20:01

标签: cakephp cakephp-3.4

我正在使用CakePHP 3.4

我正在检索用户的信息,如

$user = $this->Users->get($id, [
    'contain' => [
        'UserAddresses.States.Countries' => ['conditions' => [
               'UserAddresses.deleted' => false]],
    ],
]);

此处,UserAddressesuser_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'
]);

2 个答案:

答案 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”模型。