最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Yii2中如何使用indexBy()

来源:动视网 责编:小采 时间:2020-11-03 23:08:24
文档

Yii2中如何使用indexBy()

Yii2中如何使用indexBy():在项目开发中经常会使用到一些特殊的值作为数组的索引,一般可以先查询出数据后数组循环拼接成所需的格式。不过YII2框架提供了一种更简单的方法indexBy()。当你在调用all()方法时,它将返回一个以连续的整型数值为索引的数组。而有时候你可能希望使用一个特定
推荐度:
导读Yii2中如何使用indexBy():在项目开发中经常会使用到一些特殊的值作为数组的索引,一般可以先查询出数据后数组循环拼接成所需的格式。不过YII2框架提供了一种更简单的方法indexBy()。当你在调用all()方法时,它将返回一个以连续的整型数值为索引的数组。而有时候你可能希望使用一个特定


在项目开发中经常会使用到一些特殊的值作为数组的索引,一般可以先查询出数据后数组循环拼接成所需的格式。不过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()

Yii2中如何使用indexBy():在项目开发中经常会使用到一些特殊的值作为数组的索引,一般可以先查询出数据后数组循环拼接成所需的格式。不过YII2框架提供了一种更简单的方法indexBy()。当你在调用all()方法时,它将返回一个以连续的整型数值为索引的数组。而有时候你可能希望使用一个特定
推荐度:
标签: 使用 Yii yii2
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top