2015-04-17 87 views
1

查詢我在yii2查詢:Yii2,創建數組輸入

$models = Company::find()->where('name like :q', ['q'=>/* Array here */])->all(); 

你可以看到,我有Q-元素我要添加到查詢的數組。我該如何編寫查詢,以便檢查一個或多個q元素(數組大小未知)?

回答

5

如果你真的需要LIKE條件爲你的SQL語句,而不是IN(看第二個答案):

$query = Company::find(); 
foreach($words as $word){ 
    $query->orWhere(['like','q', $word]); 
} 
$models = $query->all(); 

這將生成SQL staement這樣的:

SELECT * 
FROM table_name 
WHERE field_name LIKE '%one%' 
    OR field_name LIKE '%two%' 
    OR field_name LIKE '%three%' 
+0

感謝,偉大的工程 –

+0

這是一個很好的解決方案,我從來沒有想過。 – nunorbatista

2

按照該文檔:http://www.yiiframework.com/doc-2.0/guide-db-active-record.html,IN條件可用於使用類似下面的模式,以指定多種可能性:

$models = Company::find()->where(['q'=>$qArray])->all(); 

這會產生這樣的SQL語句:

SELECT * FROM `company` WHERE q IN ('a','b'....); 

假設$qArray變量的內容是Array('a', 'b', ...)