在Laravel数据库选择函数

时间:2017-01-03 11:41:18

标签: php laravel laravel-5 laravel-5.3

如何在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"
]

4 个答案:

答案 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.

我建议您使用第二种变体,因为这样可以更清晰地获得您需要的结果。