Cakephp 2.8.4 игнорирует hasMany

Это очень странная проблема, которую я не мог понять в течение очень долгого времени.

У меня есть модель Загрузить, с несколькими имеет много все игнорируются UploadModel.

Например. Загрузить имеет много Лицо.

В таблице комментариев у меня есть поле foreign_key, в котором находится Upload.id.
Таким образом, отношения в UploadModel выглядят так:

$hasMany = ['Face' => ['foreignKey' => 'Face.upload_id']];

При выполнении поиска в Upload с условиями Face + [Face.celebrity_id = 4018] Я получаю следующую ошибку, потому что в запросе отсутствует Left Join to Face:

$media = $this->Upload->find('all',array(
'conditions' => array(
'Face.celebrity_id' => 4018
),
'contain' => array(
'Face'
)
));

SQL Query:
SELECT `Upload`.`id`, `Upload`.`user_id`, `Upload`.`filename`, `Upload`.`created`
FROM `uploads` AS `Upload`
WHERE `Face`.`celebrity_id` = 4018;

SQL Error:
Unknown column 'Face.celebrity_id' in 'where clause'

Как вы видите, в запросе отсутствует левый переход к Face, вот и вся проблема

Если вместо $ hasMany я добавляю отношение Face в $ ownTo, оно добавляет отношение к запросу, и оно работает!

Но выгрузка может иметь много лиц, а у Face.upload_id есть внешний ключ для загрузки, поэтому ЭТО НЕОБХОДИМО БЫТЬ МАТЬЕЙ ***** ХАСМАНИ … lol


Как вы можете видеть, это ужасно, я уже в отчаянии, я обошел проблему, добавив bindModel () перед каждым запросом, но это совершенно не нужно, hasMany должна работать !!!! е **** !!!!!

Запрос, который я хочу, чтобы Cake выполнил для меня:

SELECT `Upload`.`id`, `Upload`.`filename` FROM `uploads` AS `Upload`
LEFT JOIN `upload_faces` AS `Face` ON (`Upload`.id = `Face`.`upload_id`)
WHERE `Face`.`celebrity_id` = 4018

Я ценю любую помощь, спасибо.

0

Решение

хорошо, так что в основном, это не игнорирование hasMany, но я не могу использовать условия для отношения hasMany, может быть сделано только если это hasOne

0

Другие решения

В вашем test() функция, вы запускаете запрос на upload Таблица. Так что не может сравниться Face.celebrity_id поле из вашего запроса. Сначала вы должны знать две вещи:

  1. Состояние, в котором вы пишете conditions Предложение применяется к таблице, соответствующей вашей модели. В твоем случае, upload таблица, по которой выполняется запрос, а ваша таблица не содержит полей Face.celebrity_id,
  2. $ hasMany создает отношения уровня приложения (ассоциации). Таким образом, выполняя запрос, как вы написали в test() функция, она не присоединяется к результатам запроса.

Что вы можете сделать, это

$this->find('all', array(
'contain' => array(
'Face' => array('conditions' => 'Face.celebrity_id = 4018'))))

Это вернет все строки upload таблица со связанной строкой face таблица, если celebrity_id является 4018, иначе null массив.

Надеюсь, что это поможет вам, и если вы хотите, чтобы были возвращены только те строки, которые связаны с Face.celebrity_id = 4018, сначала вы должны запустить запрос на face таблица, а затем еще один результат первого запроса.

Для более подробной информации о втором случае вы можете обратиться этот.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector