目錄1語法2雜湊格式
3運算子格式
3.1對比
3.2and
3.3or
3.4not
3.5between和not between
3.6in和not in
3.7like
3.8exists
熟悉yii2的查詢條件後,用active record查詢資料非常方便。
以下我們介紹where()方法當中,條件的拼裝方式。
1語法yii2用where()方法(當然還有其他方法)來實現條件篩選,語法:
public
$this where ( $condition, $params = )
$params為可選引數
,指定要繫結查詢的值。
$condition為必選引數,$condition可以是字串(如'id=1')或者陣列。
$condition為陣列時
,有兩種格式:
雜湊格式:['column1' => value1, 'column2' => value2, ...]
運算子格式:[operator, operand1, operand2, ...]
2雜湊格式
通常,雜湊格式的查詢條件生成這樣的sql語句:
column1=value1 and column2=value2 and ...如果某個值是陣列,就會生成in語句。
如果某個值為null,會用is null來生成語句。
例子:['type' => 1, 'status' => 2] //
生成:(type = 1) and (status = 2)
['id' => [1, 2, 3], 'status' => 2] //
生成:(id in (1, 2, 3)) and (status = 2)
['status' => null] //
生成:status is null
3運算子格式
在運算子格式,yii會根據指定的運算子生成sql語句。
運算子有:and、or、not、between、not between、in、not in、like、or like、not like、or not like、exists、not exists、>、<、=、>=、<=、!=等。
3.1對比
['>', 'id', 1] //
生成:id > 1
['<', 'id', 100] //
生成:id < 100
['=', 'id', 10] //
生成:id = 10
['>=', 'id', 1] //
生成:id >= 1
['<=', 'id', 100] //
生成:id <= 100
['!=', 'id', 10] //
生成:id != 10
具體生成的sql語句,運算子id會自動加上反斜槓引號`,運算數會自動轉義。
3.2and
['and', 'id' => 1, 'id' => 2] //
生成:id=1 and id=2
['and', 'id=1', 'id=2'] //
生成:id=1 and id=2
['and', 'type=1', ['or', 'id=1', 'id=2']] //
生成:type=1 and (id=1 or id=2)
在第2條和第3條語句中,列名稱和搜尋值未用鍵值關係指定,所以生成的sql不會新增引號,也不會轉義。
3.3or
['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]] //
生成:(type in (7, 8, 9) or (id in (1, 2, 3)))
3.4not
['not', ['attribute' => null]] //
生成:not (attribute is null)
3.5between和not between
['between', 'id', 1, 10] //
生成:id between 1 and 10
['not between', 'id', 1, 10] //
生成:id not between 1 and 10
運算子後面的運算數1為資料表列名稱,運算數2和運算數3分別為列值範圍的最小值和最大值。
3.6in和not in
['in', 'id', [1, 2, 3]] //
生成:id in (1, 2, 3)
['not in', 'id', [1, 2, 3]] //
生成:id not in (1, 2, 3)
運算子後面的運算數1為列名稱或db表示式,運算數2為陣列,指定列值所在的範圍。
這個方法會為值新增引號,並正確轉義。
要生成混合in條件,列名和列值都設定為陣列,並且用列名為列值指定下標:
['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]] //
生成:(`id`, `name`) in ((1, 'foo'), (2, 'bar'))
另外,還可以用子查詢作為in條件的值,如下:
['in', 'user_id', (new query())->select('id')->from('users')->where(['active' => 1])]
3.7like
['like', 'name', 'tester'] //
生成:name like '%tester%'
['like', 'name', ['test', 'sample']] //
生成:name like '%test%' and name like '%sample%'
['like', 'name', '%tester', false] //
生成:name like '%tester'
// 這是自定義查詢方式,要傳入值為false的運算數3,並且自行新增%
運算數後面的運算數1為列名稱或db表示式,運算數2為字串或陣列,指定列值查詢條件。
這個方法會為值新增引號,並正確轉義。
or like、not like、or not like用法和like一樣。
['or like', 'name', ['test', 'sample']] //
生成:name like '%test%' or name like '%sample%'
['not like', 'name', 'tester'] //
生成:name not like '%tester%'
['or not like', 'name', ['test', 'sample']] //
生成:name not like '%test%' or name not like '%sample%'
3.8exists
['exists', (new query())->select('id')->from('users')->where(['active' => 1])] //
生成:exists (select "id" from "users" where "active"=1)
not exists用法和exists一樣。
Yii2查詢之where條件拼裝
2017 01 22 4282瀏覽記錄 目錄 熟悉yii2的查詢條件後,用active record查詢資料非常方便。以下我們介紹where 方法當中,條件的拼裝方式。yii2用where 方法 當然還有其他方法 來實現條件篩選,語法 public this where condition,para...
Yii2 查詢條件
字串格式,例如 status 1 雜湊格式,例如 status 1,type 2 操作符格式,例如 like name test andfilterwhere between updated at oldtime,current andwhere between updated at oldtime...
Yii2 where 條件 整理
yii2 where 涉及的幾種形式 where addparams filterwhere andwhere orwhere andfilterwhere orfilterwhere andfiltercompare 字串格式,例如 status 1 雜湊格式,例如 status 1,type 2...