Laravel Pluck 但结合名字+姓氏进行选择

2024-01-12

在 Laravel / Vue 项目中使用 select2 并需要返回以下格式的 JSON:

[
    { id: 0, text: 'enhancement' },
    { id: 1, text: 'bug' }
]

在 Laravel 中,我知道我可以使用 pluck 来创建列表数据,例如对于客户:

$customers = Customer::pluck('id', 'first_name');

但想要将 id 和名字 + 姓氏作为单个名称返回。

我怎样才能做到这一点?


您尝试过使用访问器吗?

https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor

我还没有测试过,但这可以工作:

将其添加到您的客户雄辩模型中:

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

然后尝试:

UPDATED访问器上的 pluck 仅适用于集合。如果你试试Customer::pluck('id', 'full_name')它不会工作,因为没有名为 full_name 的数据库列,因此您必须使用Customer::all()->pluck('full_name', 'id')

$customers = Customer::all()->pluck('full_name', 'id');
  • 作为旁注,为了性能,可能更好Customer::all(['id', 'first_name', 'last_name'])->pluck(...)这样我们就不会从数据库中提取不必要的列。

希望这可以帮助。

更新日期:- 2021 年 8 月 26 日如果我们使用计算属性访问器功能 https://laravel.com/docs/8.x/eloquent-mutators#defining-an-accessor,然后记住一件重要的事情......

Laravel Accessor 功能在从数据库获取数据后起作用。所以我们必须声明查询末尾的“pluck(accessorName)”...

例如:-

错误方法:-

$data = Model::pluck('full_name','id)->get(); 
$data = Model::pluck('full_name','id)->all();

在上面两个查询中,如果数据表中没有 full_name 字段,您将收到未知列错误

正确的方法:-

$data = Model::get()->pluck('full_name','id');
$data = Model::all()->pluck('full_name','id');

在上面的两个查询中,即使数据表中没有 full_name 字段,它也会完美运行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel Pluck 但结合名字+姓氏进行选择 的相关文章

随机推荐