从 MySql in Laravel DB select 函数中获取特定列值
Get specific column value from MySql in Laravel DB select function
如何从 Laravel DB select 函数 select 中的 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"
]
$all_pincodes = array_values ($list);
但我建议使用 Laravel Eloquent,因为您无论如何都在使用 Laravel,因此最好使用内置功能来简化流程。
我认为查询应该像
$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();
您能否测试一下并让我知道新状态。
最好的方法是使用查询生成器或 Eloquent 并使用它代替 get()
:
->pluck('pincode')->toArray();
使用您的变体:
\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.
我会推荐你第二种变体,因为这是获得你需要的结果的更清晰的方法。
如何从 Laravel DB select 函数 select 中的 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"
]
$all_pincodes = array_values ($list);
但我建议使用 Laravel Eloquent,因为您无论如何都在使用 Laravel,因此最好使用内置功能来简化流程。
我认为查询应该像
$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();
您能否测试一下并让我知道新状态。
最好的方法是使用查询生成器或 Eloquent 并使用它代替 get()
:
->pluck('pincode')->toArray();
使用您的变体:
\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.
我会推荐你第二种变体,因为这是获得你需要的结果的更清晰的方法。