当你在调用all()方法时,它将返回一个以连续的整型数值为索引的数组。
而有时候你可能希望使用一个特定的字段或者表达式的值来作为索引结果集数组。那么你可以在调用all()之前使用indexBy()方法来达到这个目的
// 以uid作为key值
$query = User::find()
->select(['uid', 'name'])
->indexBy('uid')
->asArray()
->all();
注意点:
与 groupBy() 或许 orderBy() 等查询要领差别, 他们将转换为 SQL 查询语句的一部分,而这个要领(indexBy)在从数据库取回数据后才见效实行的。 这意味着只能运用那些在你的 SELECT 查询中的列名。 另外,你用表名连接取列名的时刻,比方 customer.id,效果中将只包括 id 列,因而你必需挪用 ->indexBy(‘id’) 不要带表名前缀