如何在Laravel中修改口才返回的数组结构

时间:2019-07-18 12:29:54

标签: php mysql laravel laravel-5 eloquent

我目前具有以下运行Bonus :: with('users')-> get()

时获得的数组结构

我尝试添加数组并合并相似的键,但是它不起作用。我尝试使用laravel中提供的帮助程序方法,但似乎无法使其正常工作。

[
{
"id": 1,
"users_id": 1,
"bonus_type_id": 1,
"is_paid": 0,
"amount": "100.00",
"description": "desc",
"note": null,
"created_by": 2,
"last_modified_by": null,
"created_at": null,
"updated_at": null,
"deleted_at": null,
"user": {
"id": 1,
"name": "test",
"email": "test@testing.com",
"email_verified_at": null,
"status": 1,
"created_at": "2019-07-18 11:41:35",
"updated_at": "2019-07-18 11:41:35",
"deleted_at": null
}
},
{
"id": 2,
"users_id": 1,
"bonus_type_id": 2,
"is_paid": 0,
"amount": "100.00",
"description": "desc",
"note": null,
"created_by": 2,
"last_modified_by": null,
"created_at": null,
"updated_at": null,
"deleted_at": null,
"user": {
"id": 1,
"name": "test",
"email": "test@testing.com",
"email_verified_at": null,
"status": 1,
"created_at": "2019-07-18 11:41:35",
"updated_at": "2019-07-18 11:41:35",
"deleted_at": null
}
},
{
"id": 3,
"users_id": 2,
"bonus_type_id": 2,
"is_paid": 1,
"amount": "100.00",
"description": "desc",
"note": null,
"created_by": 2,
"last_modified_by": null,
"created_at": null,
"updated_at": null,
"deleted_at": null,
"user": {
"id": 1,
"name": "another test",
"email": "another@testing.com",
"email_verified_at": null,
"status": 1,
"created_at": "2019-07-18 11:41:35",
"updated_at": "2019-07-18 11:41:35",
"deleted_at": null
}
}
]

我希望结果像这样

[
  {
    user_id: 1,
    name: "test",
    bonuses: [
      {
        bonus_type_id: 1,
        amount: 100,
        is_paid: 0,
      },
      {
        bonus_type_id: 2,
        amount: 100,
        is_paid: 0,
      }
    ],
  },
  {
    user_id: 2,
    name: "another",
    bonuses: [
      {
        bonus_type_id: 2,
        amount: 100,
        is_paid: 1,
      },
    ]
  }
]

2 个答案:

答案 0 :(得分:0)

您需要改变雄辩的关系。在hasMany模型中为奖金表定义bonuses关系函数User,并使用它来获得所需的结果,如下所示:

User::with('bonuses')->get();

这样,它将从用户表中返回结果并为每个用户填充奖励。

有意义吗?

答案 1 :(得分:0)

您可以通过选择子查询来获取特定信息,如果您的关系设置正确,这应该可以工作。

User::select('user_id','name','bonus_id')
    ->with(array('bonuses'=> function($query){
         $query->select('bonus_type_id','amount','is_paid');
    }))->get();