yii 查詢構建器

查詢構建器建立在 Database Access Objects 基礎之上,可讓你創建 程序化的、DBMS無關的SQL語句。

yii\db\Query::select()

用來指定 SQL 語句當中的 SELECT 子句,入參是一個數組或者字符串,如果使用數組格式來指定字段,你可以使用數組的鍵值來表示字段的別名。默認是所有字段。很明顯,使用數組是最好的方式,不妨讓整個項目組都規定使用數組來指定字段,即使只有一個字段。數組名稱最好還是selectsQuery使yii\db\Query::distinct()distincthint使調yii\db\Query::addSelect() selects數組的方式。

yii\db\Query::from()

yii\db\Query::from() 方法指定了 SQL 語句當中的 FROM 子句,可以通過字符串或者數組的形式來定義被查詢的表名稱。跟select()函數一樣,建議使用數組的方式來統一開發。
使用Query時,也代表子查詢,非常強悍的非常方便。

yii\db\Query::where()

還是跟上面一樣,不過加多一種叫做操作符數組的東西。eg:

字符串格式,例如:'status=1'
哈希格式,例如: ['status' => 1, 'type' => 2]
操作符格式,例如:['like', 'name', 'test']

– 建議忘記字符串的方式
– 可以調用 yii\db\Query::params() 或者 yii\db\Query::addParams() 方法進行動態變量的綁定。
– 數組格式,應該是嚴格的哈希格式,並且所有條件爲and連接,所有都是等值判斷。
– 傳入Query對象時,也代表子查詢。
– 使用 yii\db\Query::andWhere() 或者 yii\db\Query::orWhere() 在原有條件的基礎上 附加額外的條件。
– 可以使用可以使用 yii\db\Query::filterWhere() 來過濾空值,這樣就不想要這麼多if case語句。提示:當一個值爲 null、空數組、空字符串或者一個只包含空白字符時,那麼它將被判定爲空值。

yii\db\Query::orderBy()

yii\db\Query::orderBy() 方法是用來指定 SQL 語句當中的 ORDER BY 子句的,參數形式跟上面一致,還是建議數組的方式。
這裏涉及一個問題,前端頁面的排序條件怎麼直接反應給後臺,而不用寫太多代碼呢?答案好像只能手寫代碼。哈哈…

yii\db\Query::groupBy()

yii\db\Query::having()

yii\db\Query::limit() 和 yii\db\Query::offset()

yii\db\Query::join()

yii\db\Query::join() 帶有四個參數:

$type: 連接類型,例如:'INNER JOIN', 'LEFT JOIN'。
$table: 將要連接的表名稱。
$on: 可選參數,連接條件,即 ON 子句。請查閱 where() 獲取更多有關於條件定義的細節。
$params: 可選參數,與連接條件綁定的參數。

提供下面三個便利函數簡化參數:

yii\db\Query::innerJoin()
yii\db\Query::leftJoin()
yii\db\Query::rightJoin()

使用join有一個問題後面需要好好理一理,avtiveRecord對象裏面有hasOne和hasMany這兩個函數,用於關聯查詢,啥情況下用他們啥時候自己寫join 的 SQL語句呢?

yii\db\Query::union()

end


yii\db\Query 提供了一整套的用於不同查詢目的的方法。

yii\db\Query::all(): 將返回一個由行組成的數組,每一行是一個由名稱和值構成的關聯數組(譯者注:省略鍵的數組稱爲索引數組)。
yii\db\Query::one(): 返回結果集的第一行。
yii\db\Query::column(): 返回結果集的第一列。
yii\db\Query::scalar(): 返回結果集的第一行第一列的標量值。
yii\db\Query::exists(): 返回一個表示該查詢是否包結果集的值。
yii\db\Query::count(): 返回 COUNT 查詢的結果。
其它集合查詢方法: 包括 yii\db\Query::sum(), yii\db\Query::average(), yii\db\Query::max(), yii\db\Query::min() 等. $q 是一個必選參數, 既可以是一個字段名稱,又可以是一個 DB 表達式。

索引查詢結果

非常有用的工能。
在調用 yii\db\Query::all() 之前使用 yii\db\Query::indexBy() ,可使用一個特定的字段或者表達式的值來作爲索引結果集數組。
如需使用表達式的值做爲索引,那麼只需要傳遞一個匿名函數給 yii\db\Query::indexBy() 方法即可

批處理查詢

當需要處理大數據的時候,像 yii\db\Query::all() 這樣的方法就不太合適了, 因爲它們會把所有數據都讀取到內存上。爲了保持較低的內存需求, Yii 提供了一個 所謂的批處理查詢的支持。批處理查詢會利用數據遊標將數據以批爲單位取出來。在數據系統裏面,要生成很大的Excel文件的時候就可以採用這個方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章