web-dev-qa-db-fra.com

cakephp OR état

Originaly posted on cakephp Q & A mais je vais le mettre ici dans l’espoir d’obtenir des réponses.

J'ai un groupe de sociétés qui a un statut de 0 par défaut mais parfois un statut supérieur. Maintenant, je veux utiliser le statut élevé s'il existe, mais revenir à 0 sinon. J'ai essayé un tas d'approches différentes, mais je reçois toujours soit uniquement celles ayant le statut 0 ou celles ayant le statut que je veux, ne me donnant jamais le statut s'il existe et 0 sinon.

Me donne seulement le statut que je spécifie, sans me donner ceux avec le statut 0:

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

    )
)

Me donne que le statut de 0:

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

Définition du statut et récupération des données dans le code:

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.
}

J'ai changé le nom des modèles pour cette question pour plus de sens, les gens sont généralement effrayés lorsque je leur dis que je travaille avec Cakephp pour mon application Flex. J'imagine que la logique de cette question n'a pas de sens, mais croyez-moi, cela a du sens dans mon application.

Merci!

13
eldamar

Je ne suis pas sûr d'avoir compris quels résultats vous attendez. Si vous souhaitez extraire tous les enregistrements ayant le statut = 0, auxquels s'ajoute celui ayant le statut = 3, vous pouvez utiliser un "IN" au lieu d'un "OU".

Dans Cake, vous écririez comme ceci:

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

Essayer 

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

    )
)

Dans le livre de recettes, il est indiqué d'encapsuler les conditions ou dans des tableaux si elles concernent le même champ http://book.cakephp.org/2.0/fr/models/retrieving-your-data.html#complex -find-conditions

49
Vigrond

Vous pouvez également extraire un enregistrement en utilisant la méthode suivante: Mettre les valeurs dans un tableau Ex. $ arr = array (1,2);

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

J'espère que vous trouverez la réponse.

0
Rashid Khan