从 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.

我会推荐你​​第二种变体,因为这是获得你需要的结果的更清晰的方法。