ОБНОВИТЬ
Это соединение из SQL после всех выборок,
FROM users Users
LEFT JOIN userinfos Userinfos ON Userinfos.id = (Users.userinfo_id)
INNER JOIN offices Offices ON Offices.id = (Userinfos.office_id)
хорошо, у меня есть база данных (MySQL), настроенная с CakePHP 3, таблица пользователей содержит расширенную информацию, хранящуюся в другой таблице.
Эта другая таблица также расширена информацией об офисе/адресе, однако по умолчанию для нее установлено значение NULL, поэтому я хочу включить ее в вызов «содержать», но не возвращать пользовательские данные, когда она пуста?
Так что это то, что я использую в настоящее время,
$UsersTable->find('all')
->contain(['Userinfos','Userinfos.Offices'])
->toArray();
Но офисы (поле office_id в таблице Usersinfos) не всегда установлены, однако я все же хочу, чтобы он возвращал всех пользователей, даже если у них нет набора офисов.
Итак, я попытался,
$UsersTable->find('all')
->contain([
'Userinfos',
'Userinfos.Offices'
])
->where(['Userinfos.office_id IS' => NULL])
->toArray();
Также,
$UsersTable->find('all')
->contain([
'Userinfos',
'Userinfos.Offices' =>
function($q) {
return $q->where(['Userinfos.office_id IS' => NULL]);
}
])
->toArray();
Переменная $UsersTable
установлена на
$UsersTable = TableRegistry::get('Users');
Если я удалю Userinfos.Offices
из условия содержания, он вернет всех моих текущих пользователей. Однако как я могу вызвать эти дополнительные данные/информацию, чтобы иметь доступ к информации Office, например, название местоположения, если оно установлено?
*Возможно, я не совсем ясно объяснил, пожалуйста, дайте мне знать, если есть что-то, что я могу объяснить лучше, спасибо.
INNER
присоединение... как сказал @drmonkeyninja, проверьте свои ассоциации, по умолчанию это будетLEFT
присоединение. - person ndm   schedule 26.06.2015