CakePHP находит элементы с отношением hasOne Model, у которых нет связанного элемента

У меня есть модель пользователя, которая имеет отношение hasOne к модели профиля. Я хочу найти пользователей, у которых нет профиля, связанного с ними. Я не знаю, работает ли counterCache для отношения hasOne или есть лучший способ с соответствующими условиями.


person Mohsenme    schedule 23.11.2014    source источник


Ответы (1)


Я считаю, что отношение hasOne создает отношение LEFT JOIN в операторе SQL. Возможно, сгенерированный SQL для вашей находки будет выглядеть примерно так (хотя предположим, что столбцов больше):

SELECT User.id, User.name, Profile.id
FROM users AS User
LEFT JOIN profiles AS Profile
  ON Profile.user_id = User.id;

Все, что вам нужно сделать, это добавить еще одно предложение WHERE: WHERE Profile.id IS NULL для несовпадающих строк. Таким образом, изменив код Cakephp на

$this->User->find('all',array(
  'conditions' => array('Profile.id' => 'NULL')))
person AgRizzo    schedule 23.11.2014
comment
На самом деле я делал это с отношением hasMany, которое возвращало пустой массив вместо одного результата! «NULL» также может быть php null. - person Mohsenme; 23.11.2014