如何使用pluck函数合并集合的值?

时间:2016-10-30 11:23:12

标签: laravel laravel-5 laravel-5.3

我使用pluck()函数来获取带有键值的输出集合:

$work_types = Work::orderBy('name')->get()->pluck('name', 'id');

输出是:

{
  0 => "Name1",
  1 => "Name2",
  2 => "Name3
}

如何将值name与值id合并以获取以下对象:

 {
      0 => "0 -Name1",
      1 => "1 - Name2",
      2 => "2 - Name3
    }

4 个答案:

答案 0 :(得分:4)

Laravel方式是create an accessor

public function getIdNameAttribute($value)
{
    return $this->id.' - '.$this->name;
}

然后使用它:

$work_types = Work::orderBy('name')->pluck('id_name', 'id');

答案 1 :(得分:2)

您可以使用map

$work_types = Work::orderBy('name')->pluck('name', 'id')
    ->map(function ($item, $key) {
        return "$key - $item";
    });

https://laravel.com/docs/5.3/collections#method-map

希望这有帮助!

答案 2 :(得分:0)

您可以将select()函数与DB::raw()函数一起用作:

$work_types = Work::select('id', DB::raw("concat(id, ' - ',name) as id_name"))
                ->orderBy('name')
                ->pluck('id_name', 'id')

您不需要获取所有列,然后执行。您可以直接从数据库中删除。

答案 3 :(得分:0)

合并**** FirstName **和** LastName ****来自数据库:

'clients' => Client::select('id', DB::raw("concat(first_name, '   ',last_name) as f_l"))

                ->orderBy('id','desc')

                ->pluck('f_l', 'id')

                ->prepend('Select Clients.....',''),