2017-04-04 09:28
浏览 237


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?

图片转代码服务由CSDN问答提供 功能建议


例如,我有一个 User 模型,它具有 name,password,xy 属性,如果我返回User: :all(); 我将返回所有用户。 但是如果我想返回一个自定义对象列表,我将返回JSON格式,如下所示:

'pass':  ... 

所以我将以不同的方式返回字段的名称 然后它们在DB中,并且还从每个返回的对象附加相关模型的属性。

我不想使用mutators,因为我只想在一个控制器中返回。 我知道我可以通过foreach遍历对象并通过赋值和创建一个新对象,并返回合并对象。 但是有更简单的方法吗?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongpu1315 2017-04-04 11:10

    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.

    解决 无用
    打赏 举报

相关推荐 更多相似问题