Оригинал размещен на Q & A cakephp, но я поставил его здесь, чтобы получить ответы.
У меня есть группа компаний, которая имеет статус 0 по умолчанию, но иногда получает более высокий статус. Теперь я хочу использовать высокий статус, если существует, но вернусь к 0, если нет. я попробовал кучу разных подходов, но я всегда получаю либо только те, у которых есть статус 0, либо те, у которых есть статус, который я хочу, никогда не давая мне статус, если существует, и 0, если нет.
Дает мне только статус, который я указываю, не давая мне статус со статусом 0:
'Company' => array ( 'conditions' => array ( 'OR' => array( 'Company.status' => 0, 'Company.status' => $status, ) ) )
Дает мне только статус 0:
'Company' => array ( 'conditions' => array ( 'OR' => array( 'Company.status' => $status, 'Company.status' => 0 ) ) )
Определение состояния и получение данных в коде:
function getCountry($id = null, $status = null) { // Bunch of code for retrieving country with $id and all it's companies etc, all with status 0. $status_less_companies = $this->Country->find... if ($status) { $status_companies = $this->Country->find('first', array( 'conditions' => array( 'Country.id' => $id ), 'contain' => array( 'Product' => array ( 'Company' => array ( 'conditions' => array ( 'OR' => array( 'Company.status' => $status, 'Company.status' => 0 ) ) ) ) ) ) } // Mergin $status_less_companies and $status_companies and returning data to flex application. }
Я изменил имя для моделей для этого вопроса, чтобы иметь больше смысла, люди вообще пугают, когда я говорю им, что я работаю с cakephp для моего приложения flex. Я предполагаю, что логика этого вопроса не имеет смысла, но поверьте мне, что это имеет смысл в моем приложении.
Благодаря!
Я не уверен, что понял, какие результаты вы ожидаете. Если вы хотите получить все записи, имеющие статус = 0, плюс, скажем, тот, у кого есть статус = 3, вы можете использовать «IN» вместо «OR».
В «Торт» вы пишете так:
$status = 3; $conditions = array('Company.status' => array(0, $status));
Пытаться
'Company' => array ( 'conditions' => array ( 'OR' => array( array('Company.status' => 0), array('Company.status' => $status), ) ) )
В поваренной книге говорится об обертке или условиях в массивах, если они относятся к одному и тому же полю. http://book.cakephp.org/2.0/ru/models/retrieving-your-data.html#complex-find-conditions
Вы также можете извлечь запись, используя следующий метод: поместить значения в массив, например $ arr = array (1,2);
$res = $this->Model->find('all', array( 'conditions' =>array('Model.filedname'=>$arr), 'model.id' => 'desc' ));
Надеюсь, вы найдете ответ.