CakePHP 3查找全部包含NULL数据,什么都不显示?

use*_*505 2 cakephp cakephp-3.0

UPDATE

这是所有选择后SQL的连接,

FROM users Users 
LEFT JOIN userinfos Userinfos ON Userinfos.id = (Users.userinfo_id) 
INNER JOIN offices Offices ON Offices.id = (Userinfos.office_id)
Run Code Online (Sandbox Code Playgroud)

好吧,我有一个使用CakePHP 3的数据库(MySQL)设置,用户表具有在另一个表中保存的扩展信息.

另一个表也扩展了办公室/地址信息但是默认设置为NULL,所以我想将它包含在'contains'调用中,但是当它为空时不会返回用户数据?

所以这就是我目前使用的,

  $UsersTable->find('all')
             ->contain(['Userinfos','Userinfos.Offices'])
             ->toArray();
Run Code Online (Sandbox Code Playgroud)

但是,办公室(officeinid表中的office_id字段)并不总是设置,但我仍然希望它返回所有用户,即使他们没有办公室设置.

所以我试过了,

  $UsersTable->find('all')
             ->contain([
                  'Userinfos',
                  'Userinfos.Offices'
              ])
             ->where(['Userinfos.office_id IS' => NULL])
             ->toArray();
Run Code Online (Sandbox Code Playgroud)

也,

  $UsersTable->find('all')
             ->contain([
                  'Userinfos',
                  'Userinfos.Offices' => 
                          function($q) {
                             return $q->where(['Userinfos.office_id IS' => NULL]);
                          }
              ])
            ->toArray();
Run Code Online (Sandbox Code Playgroud)

$UsersTable变量被设置为

   $UsersTable = TableRegistry::get('Users');
Run Code Online (Sandbox Code Playgroud)

如果我Userinfos.Offices从包含条件中删除它,那么它将返回所有当前用户.但是,我如何调用这些额外的数据/信息,以便我可以访问Office信息,例如,如果设置了位置名称?

*我可能没有清楚地解释自己,如果有什么我可以更好地解释,请告诉我,谢谢.

Fur*_*ury 6

在cakePhp3.x中默认烘焙模型时,连接表设置为INNER JOIN.您需要修改模型关联.您需要将关联设置为LEFT JOIN.

在你的情况下,如果你在src/model/UserinfosTable中查看'UserinfosTable',请确保你'左'加入'User'表或者你可以完全删除'joinType',因为在默认情况下cakephp设置Contain为'LEFT JOIN'

class UserinfosTable extends Table
{

   public function initialize(array $config)
    {

      $this->belongsTo('Userinfos', [
            'foreignKey' => 'office_id',
            'joinType' => 'LEFT'
      ]);
   }
}
Run Code Online (Sandbox Code Playgroud)