在项目开辟中经常会运用到一些特别的值作为数组的索引,平常能够先查询出数据后数组轮回拼接成所需的花样。不过YII2框架供应了一种更简朴的要领indexBy()。
当你在挪用all()要领时,它将返回一个以一连的整型数值为索引的数组。
而有时刻你能够愿望运用一个特定的字段或许表达式的值来作为索引效果集数组。那末你能够在挪用all()之前运用indexBy()要领来到达这个目标。
比方,
// 以uid作为key值
$query = User::find()
->select(['uid', 'name'])
->indexBy('uid')
->asArray()
->all();
查询效果以下:
{
"1001": {
"uid": "1001",
"name": "张三"
},
"1002": {
"uid": "1002",
"name": "李四"
},
"1003": {
"uid": "1003",
"name": "王五"
}
}
如需运用表达式的值做为索引,那末只需要通报一个匿名函数给indexBy()要领即可:
// 以uid和name组合作为key值
$query = User::find()
->select(['uid', 'name'])
->indexBy(function ($row) {
return $row['uid'] . $row['name']; // row中运用的字段名只能是查询返回的字段名
})
->asArray()
->all();
查询效果以下:
{
"1001张三": {
"uid": "1001",
"name": "张三"
},
"1002李四": {
"uid": "1002",
"name": "李四"
},
"1003王五": {
"uid": "1003",
"name": "王五"
}
}
注重: 与 groupBy() 或许 orderBy() 等查询要领差别, 他们将转换为 SQL 查询语句的一部分,而这个要领(indexBy)在从数据库取回数据后才见效实行的。 这意味着只能运用那些在你的 SELECT 查询中的列名。 另外,你用表名连接取列名的时刻,比方 customer.id,效果中将只包括 id 列,因而你必需挪用 ->indexBy(‘id’) 不要带表名前缀。
引荐:《YII教程》
以上就是Yii2中怎样运用indexBy()的细致内容,更多请关注ki4网别的相干文章!
收藏 | 0