Using select2 with a Laravel / Vue project and need to return JSON in the following format:
[
{ id: 0, text: 'enhancement' },
{ id: 1, text: 'bug' }
]
In Laravel I know I can use pluck to create my list data e.g. for customers:
$customers = Customer::pluck('id', 'first_name');
But Want to return the id and first name + last name as a single name.
How can I do this?
Have you tried using Accessors?
https://laravel.com/docs/5.4/eloquent-mutators#defining-an-accessor
I have not tested it but this could work:
add this to your Customer Eloquent Model:
public function getFullNameAttribute()
{
return ucfirst($this->first_name) . ' ' . ucfirst($this->last_name);
}
and then try:
UPDATED pluck on accessor will only work on a collection. If you try Customer::pluck('id', 'full_name')
it will not work since there is no db column named full_name, therefore you must use Customer::all()->pluck('full_name', 'id')
$customers = Customer::all()->pluck('full_name', 'id');
Customer::all(['id', 'first_name', 'last_name'])->pluck(...)
so that we don't pull unnecessary columns from the db.Hope this helps.
Updated Date:- 26th Aug, 2021 If we use computed Attribute accessor functionality, then mind it one important thing...
Laravel Accessor functionality works after the Data fetched from DataBase. So we have to declare "pluck(accessorName)" at the end of Query....
For Example:-
Wrong Methods:-
$data = Model::pluck('full_name','id)->get();
$data = Model::pluck('full_name','id)->all();
in above two queries if you does not have full_name field in DataTable you will get Unknown column error
Right Methods:-
$data = Model::get()->pluck('full_name','id');
$data = Model::all()->pluck('full_name','id');
in above two queries it will works perfectly even if you doesn't have full_name field in DataTable
You can do it like this,
$customers = DB::table('customers')->select("id", "CONCAT(firstname,' ',lastname) as fullname")->get();
or you also do like this,
$customers = DB::table('customers')->select(DB::raw('CONCAT(firstname,' ',lastname) as fullname, id'))->get();
or with PHP way,
$fullname = $customers->firstname. " " .$customers->lastname;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With