состояние торта или - PullRequest
       0

состояние торта или

13 голосов
/ 13 декабря 2011

Первоначально опубликовано на 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'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.Я думаю, логика этого вопроса не имеет смысла, но поверьте мне, что это имеет смысл в моем приложении.

Спасибо!

Ответы [ 3 ]

49 голосов
/ 13 декабря 2011

Попробуйте

'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

25 голосов
/ 13 декабря 2011

Я не уверен, что понял, каких результатов вы ожидаете.Если вы хотите получить все записи, имеющие статус = 0, плюс, скажем, запись со статусом = 3, вы можете использовать «IN» вместо «ИЛИ».

В Cake вы должны написать это так:это:

$status = 3;
$conditions = array('Company.status' => array(0, $status));
0 голосов
/ 30 апреля 2015

Вы также можете получить запись, используя следующий метод: поместите значения в массив, например, $ arr = array (1,2);

 $res = $this->Model->find('all', array(                      
        'conditions' =>array('Model.filedname'=>$arr),
        'model.id' => 'desc'
  ));

Я надеюсь, что вы найдете ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...