如何在Laravel数据库选择函数中从MySql获取结果后获取特定列值
以下是我的PHP代码。
$list = DB::select('SELECT DISTINCT a.pincode FROM table_name nvs
JOIN areas a on nvs.area_id = a.id
where nvs.city_id = ?;', [$area_id]);
以下是上述查询的结果。
[
{
"pincode": "560005"
},
{
"pincode": "560006"
}
]
我只需要将pincode值作为键值对。所以我试着使用下面的代码。
return array_column($list->toArray(), 'pincode');
它给调用数组上的成员函数toArray()。
如何在不使用foreach循环的情况下仅获取值。
答案
我使用了以下代码
$pincode_list = DB::table('table_name as nvs')
->join('areas as a', 'nvs.area_id', '=', 'a.id')
->select('a.pincode')
->where('nvs.city_id', '=', $area_id)
->distinct('a.pincode')->pluck('pincode')->toArray();
结果是:
[
"560067",
"560035"
]
答案 0 :(得分:5)
最好的方法是使用查询生成器或Eloquent并使用它代替get()
:
->pluck('pincode')->toArray();
答案 1 :(得分:1)
我认为查询应该像
$area_ids = DB::table('table_name')
->join('areas', 'nvs.area_id', '=', 'table_name.id')
->select('table_name.pincode')
->where('nvs.city_id', '=', $area_id)
->distinct()->get();
如果您将其作为对象并希望它是数组,那么您可以在toArray()
使用$area_ids = $area_ids->toArray();
,请测试它并让我知道新状态。
答案 2 :(得分:0)
$all_pincodes = array_values ($list);
但我建议使用Laravel Eloquent,因为无论如何使用Laravel,所以最好使用内置功能来简化这个过程。
答案 3 :(得分:0)
使用您的变体:
\DB::setFetchMode(\PDO::FETCH_ASSOC);
$data = \DB::select($yourQuery);
$pincodes = array_pluck($data, 'pincode')
\DB::setFetchMode(config('database.fetch')); //return fetch to default
使用更流畅的方式:
$pincodes = \DB::table('table')->pluck('pincode')->toArray(); //do not forget about wheres and joins in this query.
我建议您使用第二种变体,因为这样可以更清晰地获得您需要的结果。