Laravel ::采用多列

Luc*_*tyr 9 laravel laravel-5

我需要填充刀片格式<select>标签.

我知道Model::pluck('column1', 'column2')填充选择标记的方法.

但就我而言,我必须连接两列,并获取id.就像是

Model::pluck('column_1 && column_2', 'id')

有可能吗?如果是,那么正确的语法是什么?

如果没有,那么最好的选择是什么呢?

Far*_*fan 19

最好的解决方案是在你的模型中创建访问器功能,让我们假设如果你想获得全名,那么你可以这样做.

public function getFullNameAttribute()
{
    return $this->first_name . ' ' . $this->last_name;
}
Run Code Online (Sandbox Code Playgroud)

你可以轻松获得全名.

$users = User::where('id', 1)->get()->pluck('full_name', 'id');
Run Code Online (Sandbox Code Playgroud)

Eloquent将调用getFullNameAttribute函数并获得连接值.

  • 这是个好主意,但是雄辩的`pluck()`方法会给您“找不到列”错误。您需要先获取数据,然后使用Collection方法`pluck()`(这是完全不同的方法)。因此,代码将类似于`Model :: get(['column1','column2','id'])-&gt; pluck('columns','id')`,请解决此问题。另外,被投票。 (4认同)

Ale*_*nin 5

您可以使用selectRaw()

Model::selectRaw("CONCAT ('column1', 'column2') as columns, id")->pluck('columns', 'id');
Run Code Online (Sandbox Code Playgroud)

或者,您可以手动执行以下操作:

$collection = Model::get(['column1', 'column2', 'id']);
foreach ($collection as $item) {
    $plucked[$item->id] = $item->column1 . $item->column2;
}
dd($plucked);
Run Code Online (Sandbox Code Playgroud)