У меня есть модель X, которая связана с моделью Y.
X имеет много Y.
У есть атрибут «статус».
Я хочу найти все X так, чтобы статус ВСЕХ Y, связанных с X, был равен «активный», т.е. все Y.status == «активный».
Вот упрощенная схема:
0 ….. тест
1 ….. два
0 ….. активный ….. 0
1 ….. inactive..0
2 ….. активный …. 1
3 ….. активный …. 1
Я хочу, чтобы мой запрос возвращал x с идентификатором 1, так как обе связанные с ним записи Y активны. Я не хочу, чтобы он возвращал x с идентификатором 0, поскольку обе его записи Y не активны.
Я пытался использовать запросы соединения, но они продолжают возвращать неожиданный результат, возвращая оба X.
Я использую Cakephp 2.2.
$data = TableRegistry::get('Y')->find()->where(['x_id' => 1);
//with assosiation
$data = TableRegistry::get('Y')->find()->where(['x_id' => 1])->contain(['X']);
полная документация здесь http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html
РЕДАКТИРОВАТЬ
для поиска по статусу вы можете добавить параметр поиска в где ()
$data = TableRegistry::get('Y')
->find()
->where(['x_id' => 1, 'status' => 'active'])
->contain(['X']);
Использование CakePHP 2.x
$data = $this->Y->find('all',
array(
'conditions'=>array('x_id'=>1,'status'=>'active'),
'contain' => array('X')
));
Других решений пока нет …