web-dev-qa-db-ja.com

cakephp OR状態

元々 投稿 on 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.
}

私はこの質問のモデルの名前をよりわかりやすくするために変更しました。FlexアプリケーションでCakePHPを使用していると言ったとき、人々は一般的に驚いています。この質問のロジックは意味をなさないと思いますが、私のアプリケーションでは理にかなっていると信じています。

ありがとう!

15
eldamar

私はあなたがどのような結果を期待するのか理解していません。ステータスが0のすべてのレコードを取得したい場合、さらにステータスが3のレコードを取得するとします。「OR」の代わりに「IN」を使用できます。

Cakeでは、次のように書きます:

$status = 3;
$conditions = array('Company.status' => array(0, $status));
25
nIcO

試す

'Company' => array (
    'conditions' =>  array (
        'OR' => array(
            array('Company.status' => 0),
            array('Company.status' => $status),
        )

    )
)

クックブックでは、条件が同じフィールドに関係している場合はor条件を配列でラップするように記載されています http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-検索条件

49
Vigrond

また、次の方法を使用してレコードをフェッチすることもできます。 $ arr = array(1,2);

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

あなたが答えを見つけてくれることを願っています。

0
Rashid Khan