0

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?

1
  • Yes. Would you be able to add an example of how you would do it with a foreach? Commented Apr 4, 2017 at 10:45

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.