在項目開發(fā)中經(jīng)常會使用到一些特殊的值作為數(shù)組的索引,一般可以先查詢出數(shù)據(jù)后數(shù)組循環(huán)拼接成所需的格式。不過yii2框架提供了一種更簡單的方法indexby()。
當(dāng)你在調(diào)用all()方法時,它將返回一個以連續(xù)的整型數(shù)值為索引的數(shù)組。
而有時候你可能希望使用一個特定的字段或者表達(dá)式的值來作為索引結(jié)果集數(shù)組。那么你可以在調(diào)用all()之前使用indexBy()方法來達(dá)到這個目的。
例如,
// 以uid作為key值 $query = User::find() ->select(['uid', 'name']) ->indexBy('uid') ->asArray() ->all();
查詢結(jié)果如下:
{ "1001": { "uid": "1001", "name": "張三" }, "1002": { "uid": "1002", "name": "李四" }, "1003": { "uid": "1003", "name": "王五" } }
如需使用表達(dá)式的值做為索引,那么只需要傳遞一個匿名函數(shù)給indexBy()方法即可:
// 以uid和name組合作為key值 $query = User::find() ->select(['uid', 'name']) ->indexBy(function ($row) { return $row['uid'] . $row['name']; // row中使用的字段名只能是查詢返回的字段名 }) ->asArray() ->all();
查詢結(jié)果如下:
{ "1001張三": { "uid": "1001", "name": "張三" }, "1002李四": { "uid": "1002", "name": "李四" }, "1003王五": { "uid": "1003", "name": "王五" } }
注意: 與 groupBy() 或者 orderBy() 等查詢方法不同, 他們將轉(zhuǎn)換為 SQL 查詢語句的一部分,而這個方法(indexBy)在從數(shù)據(jù)庫取回數(shù)據(jù)后才生效執(zhí)行的。 這意味著只能使用那些在你的 SELECT 查詢中的列名。 此外,你用表名連接取列名的時候,比如 customer.id,結(jié)果中將只包含 id 列,因此你必須調(diào)用 ->indexBy(‘id’) 不要帶表名前綴。
推薦:《YII教程》??
以上就是Yii2中如何使用indexBy()的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號