Условие cakephp ИЛИ
Оригинал размещен на cakephp Q & A, но я поставлю его здесь, чтобы получить ответы.
У меня есть группа компаний, которая имеет статус 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 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. Я предполагаю, что логика этого вопроса не имеет смысла, но поверьте мне, что это имеет смысл в моем приложении.
Спасибо!
Ответы
Ответ 1
Я не уверен, что понял, какие результаты вы ожидаете. Если вы хотите получить все записи, имеющие статус = 0, плюс пусть говорят тот, у кого есть статус = 3, вы можете использовать "IN" вместо "OR".
В Cake вы должны написать это следующим образом:
$status = 3;
$conditions = array('Company.status' => array(0, $status));
Ответ 2
Попробуйте
'Company' => array (
'conditions' => array (
'OR' => array(
array('Company.status' => 0),
array('Company.status' => $status),
)
)
)
В поваренной книге говорится об обертке или условиях в массивах, если они относятся к одному и тому же полю
http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions
Ответ 3
Вы также можете получить запись, используя следующий метод:
положить значения в массив
например $Обр = массив (1,2);
$res = $this->Model->find('all', array(
'conditions' =>array('Model.filedname'=>$arr),
'model.id' => 'desc'
));
Надеюсь, вы найдете ответ.