这个很好用,结合了select()和php的array_column(),一气呵成
// 返回数组
Db::table('think_user')->where('status',1)->column('name');
// 指定id字段的值作为索引
Db::table('think_user')->where('status',1)->column('name', 'id');
// 指定id字段的值作为索引 返回所有数据
Db::table('think_user')->where('status',1)->column('*','id');
但有一个坑,这儿注意如果用了 * ,那么指定field将没有任何意义,如下
$oldLrPkIdDic = Model::field(['id lid', 'name', 'status'])->where(['id' => 2])->column('*', 'lid')
按道理是想以lid为索引,返回 lid,name,status 的数组集合,但实际情况却是返回了整个表的字段数据,且字段别名也不生效。
正确写法如下:
$fields = ['id lid', 'name', 'status'];
$oldLrPkIdDic = Model::field($fields)->where(['id' => 2])->column($fields, 'lid')
总之,注意,column的第一个参数是字段,可以是单个,也可是多个,那么,其它上面可以这样写了:
$oldLrPkIdDic = Model::where(['id' => 2])->column(['id lid', 'name', 'status'], 'lid')
注,以下两种写法其实是一个意思
Db::table('think_user')->where('status',1)->column('name', 'id');
Db::table('think_user')->where('status',1)->column(['name'], 'id');
上面两种的写法获得的结果都是一样的:[id=>name,...]
而非[id=>['name'=>xx],...]