Reputation: 4783
Is there a simple way to return more objects with different attribute name in JSON response?
For example I have a User
model which has attributes name, password, xy
and if I do return User::all();
I will return all users. But what if I want to return a list of custom objects where I will return JSON format like:
{
'username' : ...
'pass': ...
'xyz' : ...
'from_related_model' : ...
}
so I will have name of fields returned differently then they are in DB, and also attach to each returned object an attribute from related model.
I don't want to use mutators as I only want to return like that within one controller. I know I can traverse through object with foreach and make a new object by assigning values, and returning merged object. But is there a simpler way to do this?
Upvotes: 0
Views: 3180
Reputation: 40899
You'll need to generate the list of objects to return manually.
Example: if you wanted to return a custom object for each user fetched from the database you could do something like the following in your controller:
$result = [];
foreach (User::all() as $user) {
$result[] = [
'username' => $user->username,
'full_name' => $user->first_name . ' ' . $user->last_name,
'xyz' => 5,
];
}
return $result;
Every time you return an array or a Collection from controller method, it will be converted automatically to JSON.
Upvotes: 3