Yii2 使用 where AND 和 OR 分组循环
Yii2 using where AND and OR grouping with looping
我有一个关键字 "example query" 和
我喜欢这样查询
SELECT * FROM project WHERE (FLAG=1 and STATUS=1)
and (NAMA_PROJECT
like '%example query%' or DESCRIPTION_PROJECT like '%example query%'
or NAMA_PROJECT like '%example%' or NAMA_PROJECT like '%query%')
ORDER
BY WAKTU_POST;
我已经试过了,但它给了我不想要的查询。
$query=Project::find()->where(['FLAG'=>1,'STATUS'=>1])
->andFilterWhere(['like','NAMA_PROJECT',$q])
->andFilterWhere(['like','DESCRIPTION_PROJECT',$q]);
$words=\yii\helpers\BaseStringHelper::explode($q,$delimiter=' ');
foreach($words as $word){
$query->orWhere(['like','NAMA_PROJECT',$word]);
}
where 条件中是否可以有一个循环?
你可以这样试试
Project::find()
->where("(FLAG=1 and STATUS=1) AND
((NAMA_PROJECT like '%example query%' OR DESCRIPTION_PROJECT like '%example query%' OR NAMA_PROJECT like '%example%' or NAMA_PROJECT like '%query%')")
->all();
$words = \yii\helpers\BaseStringHelper::explode($q,$delimiter=' ');
$condition[] = 'OR';
$condition[] = ['like','NAMA_PROJECT',$q];
$condition[] = ['like','DESCRIPTION_PROJECT',$q];
foreach($words as $word){
$condition[] = ['like','NAMA_PROJECT',$word];
}
$query = Project::find()
->where(['FLAG' => 1, 'STATUS' => 1])
->andWhere($condition)
->orderBy(['WAKTU_POST' => SORT_DESC])
->all();
我有一个关键字 "example query" 和 我喜欢这样查询
SELECT * FROM project WHERE
(FLAG=1 and STATUS=1)
and(NAMA_PROJECT like '%example query%' or DESCRIPTION_PROJECT like '%example query%' or NAMA_PROJECT like '%example%' or NAMA_PROJECT like '%query%')
ORDER BY WAKTU_POST;
我已经试过了,但它给了我不想要的查询。
$query=Project::find()->where(['FLAG'=>1,'STATUS'=>1])
->andFilterWhere(['like','NAMA_PROJECT',$q])
->andFilterWhere(['like','DESCRIPTION_PROJECT',$q]);
$words=\yii\helpers\BaseStringHelper::explode($q,$delimiter=' ');
foreach($words as $word){
$query->orWhere(['like','NAMA_PROJECT',$word]);
}
where 条件中是否可以有一个循环?
你可以这样试试
Project::find()
->where("(FLAG=1 and STATUS=1) AND
((NAMA_PROJECT like '%example query%' OR DESCRIPTION_PROJECT like '%example query%' OR NAMA_PROJECT like '%example%' or NAMA_PROJECT like '%query%')")
->all();
$words = \yii\helpers\BaseStringHelper::explode($q,$delimiter=' ');
$condition[] = 'OR';
$condition[] = ['like','NAMA_PROJECT',$q];
$condition[] = ['like','DESCRIPTION_PROJECT',$q];
foreach($words as $word){
$condition[] = ['like','NAMA_PROJECT',$word];
}
$query = Project::find()
->where(['FLAG' => 1, 'STATUS' => 1])
->andWhere($condition)
->orderBy(['WAKTU_POST' => SORT_DESC])
->all();