CakePhp: поиск / разбиение на страницы с условиями на & quot; hasMany & quot; ассоциированные модели

я пытаюсь сделать небольшое поисковое действие для одной из моих моделей.
Моя модель Salarie был связан с некоторыми другими моделями, в частности:

  • Salarie -> hasMany -> Permission
  • Salarie -> hasOne -> Carburant

Поэтому я пытаюсь найти () на моей модели Salarie выбрать записи, которые соответствуют ключевому слову.
Это ключевое слово можно найти в моей модели Salarieили в связанной модели Permission, Carburant,

Вот моя фактическая находка ():

    $salaries = $this->Salarie->find('all',array(
'contain' => array(
'User','Agence','Entitee','Fonction','Contact','Ligne','Car','CallingCard','Badge','Carburant','Permission'),
'conditions'=>array(
'OR'=>array(
'Salarie.nom LIKE' => '%'.$keyWord.'%',
'Salarie.prenom LIKE' => '%'.$keyWord.'%',
'Salarie.secu LIKE' => '%'.$keyWord.'%',
'Salarie.tel LIKE' => '%'.$keyWord.'%',
'Salarie.mobile LIKE' => '%'.$keyWord.'%',
'Salarie.ville LIKE' => '%'.$keyWord.'%',
'Salarie.email LIKE' => '%'.$keyWord.'%',
'Carburant.numero LIKE' => '%'.$keyWord.'%',
)
)
));

Этот код работает, но не смотрит в Permission таблица / модель, если я добавлю эту строку
'Permission.login LIKE' => '%'.$keyWord.'%', в моем массиве условий я получил ошибку

Column not found: 1054 Unknown column 'Permission.login' in 'where clause'

Я попробовал с contain но это не то, что я ищу, contain фильтрует данные в результаты find,

если кто-то получил советы?

0

Решение

Соединения SQL выполняются только ассоциациями hasOne и ownTo, а не hasMany и HABTM. Ты можешь использовать связываемый Плагин для фильтрации записей на основе условий для ассоциаций hasMany.

0

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

Я нашел то, что решило мою проблему.

     'group' => 'Salarie.nom',
'joins'=>array(
array(
'table'=>'permissions',
'alias'=>'Permission',
'type'=>'LEFT',
'conditions'=>array(
'Salarie.id = Permission.salarie_id',
)
)
)

если бы у меня был этот код для моего поиска, SQL-запрос прекрасно работает. Я просто должен GROUP BY чтобы избежать двойного результата.

0

По вопросам рекламы [email protected]