我想使用yii2
查询,其中我想检查不等于条件。
我试过这样但是没有给出预期的结果。我该怎么做?
$details = MovieShows::find()->where(['movie_id'=>$id])
->andWhere(['location_id'=>$loc_id])
->andWhere(['cancel_date'=>!$date])->all();
答案 0 :(得分:91)
在这种情况下,您需要使用运算符格式:[operator, operand1, operand2, ...]
。所以你的代码应该是这样的:
$details = MovieShows::find()
->where(['movie_id'=>$id])
->andWhere(['location_id'=>$loc_id])
->andWhere(['<>','cancel_date', $date])
->all();
More关于使用where方法和运算符格式
答案 1 :(得分:17)
你也可以试试这个:
$details = MovieShows::find()->where(['movie_id'=>$id])
->andWhere(['!=', 'cancel_date', $date])->all();
表示大于
$details = MovieShows::find()->where(['movie_id'=>$id])
->andWhere(['>', 'cancel_date', $date])->all();
小于
$details = MovieShows::find()->where(['movie_id'=>$id])
->andWhere(['<', 'cancel_date', $date])->all();
More点击此处
答案 2 :(得分:6)
也许这一个帮助......:)
$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))
]);
答案 3 :(得分:5)
应用条件的更好,更安全的方法。
Booking::find()->where('tour_id = :tour_id and id != :id', ['tour_id'=> $chk->tour_id, 'id' => $id])->all();
答案 4 :(得分:2)
您可以使用此
$this->find()->where(['resource_id' => $resource_id]) ->andWhere(['>=', 'start_time', $start_time])->all();
答案 5 :(得分:1)
对于@tony答案,对于那些需要封装子查询的人来说,这里有一个简单的例子:
$users = User::find()
->where([
'not in',
'id',
(new Query())
->select('user_id')
->from(MyTable::tableName())
->where(['related_id'=>$myRelatedId])
->all();
答案 6 :(得分:0)
您可以使用以下粘贴的代码:
$details = MovieShows::find()->where(['movie_id'=>$id])
->andWhere(['location_id'=>$loc_id])
->andWhere(['not in','cancel_date',$date])->all();
答案 7 :(得分:0)
<?= $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')
对于需要使用子查询的人,可能会帮助您。
答案 8 :(得分:0)
如果任何阅读此书的人需要使用REGEXP或类似产品,则可以在Yii2(2.0.15.1)中使用:
->andWhere(['NOT REGEXP', 'column','[A-Za-z]'])