2017-02-08 2 views
0

У меня есть ключевое слово «пример запроса» и мне нравится как этот запросYii2 использованием, где И и ИЛИ группирования со сквозными

SELECT * FROM проект, где (FLAG=1 and STATUS=1) и (NAMA_PROJECT like '%example query%' or DESCRIPTION_PROJECT like '%example query%' or NAMA_PROJECT like '%example%' or NAMA_PROJECT like '%query%') ЗАКАЗ ПО 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]); 
} 

Возможно ли иметь петлю внутри условия?

ответ

2
$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(); 
+0

Это запрос, который я хочу. Но это дает мне эту ошибку, если я не удаляю '-> all()'. Свойство query должно быть экземпляром класса, который реализует QueryInterface, например. yii \ db \ Query или его подклассы. Ты знаешь почему? – GenkaiG

+0

@GenkaiG, используя этот запрос в поискеModel или dataProvider? –

+0

это для dataProvider – GenkaiG

0

Вы можете попробовать Как это

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(); 

For Detail Information check this answers

+0

, который работает, но я не очень хочу. Я хочу, чтобы динамически добавить OR условие столько слов из ключевого слова – GenkaiG

+0

, а затем попытаться использовать цикл для этого и concat OR и AND. –

Смежные вопросы