web-dev-qa-db-fra.com

Comment utiliser pas égal à l'intérieur d'une requête Yii2

Je veux utiliser une requête yii2 dans laquelle je veux vérifier une condition différente de .. .. J'ai essayé comme ça mais cela n'a pas donné les résultats souhaités. Comment fait-on ça? 

$details        =   MovieShows::find()->where(['movie_id'=>$id])
                    ->andWhere(['location_id'=>$loc_id])
                    ->andWhere(['cancel_date'=>!$date])->all();
37
Bloodhound

Dans ce cas, vous devez utiliser le format operator: [operator, operand1, operand2, ...]. Donc, votre code devrait ressembler à ceci:

$details = MovieShows::find()
           ->where(['movie_id'=>$id])
           ->andWhere(['location_id'=>$loc_id])
           ->andWhere(['<>','cancel_date', $date])
           ->all();

More sur l'utilisation de la méthode where et du format de l'opérateur

86
Tony

Vous pouvez aussi essayer ceci:

$details = MovieShows::find()->where(['movie_id'=>$id])
           ->andWhere(['!=', 'cancel_date', $date])->all();

pour plus que

$details = MovieShows::find()->where(['movie_id'=>$id])
               ->andWhere(['>', 'cancel_date', $date])->all();

pour moins de

$details = MovieShows::find()->where(['movie_id'=>$id])
               ->andWhere(['<', 'cancel_date', $date])->all();

Plus vérifier ici

15
Muhammad Shahzad

Peut-être que cette aide-là ... :)

$query->andFilterWhere([ 'or',
                           ['<=', 'affidavit_cont', 0],
                           ['=', 'affidavit_cont1', 0],
                           ['>', 'affidavit_cont2', 0],
                           ['!=', 'affidavit_cont3', $this->affidavit3],
                           ['in', 'attempt_count', $this->attempted],

                      ]);

$query->andFilterWhere(['like', 'job_invoice.paid_status', '',]);

$query->andFilterWhere(['in', 'status_id', $this->status_id]);

$query->andFilterWhere(['between', 'last_attempt',
    strtotime(Utility::convertDate2Db($this->from_date)),
    strtotime(Utility::convertDate2Db($this->to_date))
    ]);
6
Kalpesh Desai

Le moyen le plus efficace et le plus sûr d’appliquer une condition.

Booking::find()->where('tour_id = :tour_id and id != :id', ['tour_id'=> $chk->tour_id, 'id' => $id])->all();
5
SO-user

Vous pouvez utiliser ceci 

$this->find()->where(['resource_id' => $resource_id]) ->andWhere(['>=', 'start_time', $start_time])->all();
2
Faizan Khattak

En plus de la réponse @tony, pour ceux qui ont besoin d'encapsuler une sous-requête, voici un exemple rapide:

$users = User::find()                  
            ->where([
                'not in',
                'id',
                (new Query())
                    ->select('user_id')
                    ->from(MyTable::tableName())
                    ->where(['related_id'=>$myRelatedId])
            ->all();
1
letsjump
        <?= $form->field($model, 'first_name')->dropDownList(
        arrayhelper::map(user::find()
                                ->where([ 'not in ' ,'first_name', patient::find() ->select([ 'patient_name' ]) ->asArray()  ])
        ->all(),'id','first_name')

Peut-être que cela vous aidera pour qui besoin d'utiliser sous-requête

0
Naeem Marzu

Vous pouvez simplement utiliser le code collé ci-dessous:

$details        =   MovieShows::find()->where(['movie_id'=>$id])
                    ->andWhere(['location_id'=>$loc_id])
                    ->andWhere(['not in','cancel_date',$date])->all();
0
Mohan Prasad