1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
附加條件
你可以使用 andWhere() 或者 orWhere() 在原有條件的基礎(chǔ)上 附加額外的條件。你可以多次調(diào)用這些方法來(lái)分別追加不同的條件。 例如,
$status = 10;
$search = 'yii';
$query->where(['status' => $status]);
if (!empty($search)) {
$query->andWhere(['like', 'title', $search]);
}12345678
如果 $search 不為空,那么將會(huì)生成如下 SQL 語(yǔ)句:
... WHERE (`status` = 10) AND (`title` LIKE '%yii%')1
過(guò)濾條件
當(dāng) WHERE 條件來(lái)自于用戶的輸入時(shí),你通常需要忽略用戶輸入的空值。 例如,在一個(gè)可以通過(guò)用戶名或者郵箱搜索的表單當(dāng)中,用戶名或者郵箱 輸入框沒(méi)有輸入任何東西,這種情況下你想要忽略掉對(duì)應(yīng)的搜索條件, 那么你就可以使用 yii\db\Query::filterWhere() 方法來(lái)實(shí)現(xiàn)這個(gè)目的:
// $username 和 $email 來(lái)自于用戶的輸入
$query->filterWhere([
'username' => $username,
'email' => $email,
]);12345
yii\db\Query::filterWhere() 和 where() 唯一的不同就在于,前者 將忽略在條件當(dāng)中的hash format的空值。所以如果 email為空而username 不為空,那么上面的代碼最終將生產(chǎn)如下 SQL …WHERE username=:username。
提示: 當(dāng)一個(gè)值為 null、空數(shù)組、空字符串或者一個(gè)只包含空白字符時(shí),那么它將被判定為空值。
類似于 [yii\db\Query::andWhere()|andWhere()]] 和 orWhere(), 你可以使用 yii\db\Query::andFilterWhere() 和yii\db\Query::orFilterWhere() 方法 來(lái)追加額外的過(guò)濾條件。
andWhere和andFilterWhere都可以用來(lái)追加條件,只是andFilterWhere會(huì)忽略條件中的空值
- 1 回答
- 0 關(guān)注
- 761 瀏覽
添加回答
舉報(bào)