АКТУАЛИЗИРАНЕ
Това е присъединяването от 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 по подразбиране, така че искам да я включа в повикване „contain“, но да не връщам потребителските данни, когато са празни?
Така че това е, което използвам в момента,
$UsersTable->find('all')
->contain(['Userinfos','Userinfos.Offices'])
->toArray();
Но Offices (полето 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