Laravel::拔出多个列

imzjd6km  于 2022-12-05  发布在  其他
关注(0)|答案(7)|浏览(164)

我需要填充刀片格式的<select>标记。
我知道用Model::pluck('column1', 'column2')方法填充select标记。
但是在我的例子中,我必须连接两个列,并获得id。
Model::pluck('column_1 && column_2', 'id')
是否可能?如果是,正确的语法是什么?
如果不是,那么最好的选择是什么?

dl5txlt9

dl5txlt91#

您可以使用selectRaw()

Model::selectRaw("CONCAT ('column1', 'column2') as columns, id")->pluck('columns', 'id');

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

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

wa7juj8i2#

get()方法检索到的模型结果只是常规Support-Collection类的子类,因此您实际上可以访问所有相同的好东西。

$eloquentCollection = app(YourModel::class)
    ->where('field', 'value')
    ->get(['id', 'column_1', 'column_2']);

$mapped = $eloquentCollection->mapWithKeys(function (YourModel $model) {
    return [$model->id => $model->column_1 . $model->column_2];
})
py49o6xq

py49o6xq3#

另一个简单道:

return User::select(DB::raw('CONCAT(first_name, " - ", last_name) AS full_name, id'))
           ->pluck('full_name', 'id');
dsekswqp

dsekswqp4#

这里的读者应该知道,pluck方法返回一个对象,如果你想在不使用toArray方法的情况下,同时取多列并返回一个数组,你只需将列名传递给all()函数,它就会将所需的列作为数组返回。

YourModelName::all('id', 'name');
slhcrj9b

slhcrj9b5#

现在已经很晚了,但你可以这样做:
$data = Model::select('id','column_1','column_2')->get()
然后在刀片内部使用,如:
$data->first_name." ".$data->last_name

gz5pxeao

gz5pxeao6#

您可以使用以下命令选择所需的列:

YourModel::select('column1', 'columns2')->whereColumnId('1')->get()                                                                             
    ->map(function($model){
        return $model->column1.','.$model->column2;
    })->toArray();
enxuqcxy

enxuqcxy7#

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

public function getFullNameAttribute()
{
    return $this->first_name . ' ' . $this->last_name;
}

且您可以轻松地获得全名。

$users = User::where('id', 1)->get()->pluck('full_name', 'id');

Eloquent将调用getFullNameAttribute函数并获取连接值。

相关问题