Yii2查詢之where條件拼裝

2021-09-08 22:51:01 字數 4302 閱讀 1989

目錄

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...