在控制器中将hasMany集合拉入结果对象的一种可读方法

时间:2019-05-18 23:20:26

标签: laravel eloquent crud

在资源控制器内部,我具有以下显示功能。

public function show(Invite $invite)
{
    return response($invite->jsonSerialize(), Response::HTTP_CREATED);
}

邀请模型有很多客人,而客人模型属于一个邀请。标准资源路线。当我查询网址时,会收到类似以下的响应:

{
    id":17,
    "user_id":2,
    "event_id":1,
    "name":"Fred Neumann +1",
    "called":0,
    "emailed":0,
    "invited":1,
    "max_guests":2,
    "created_at":"2019-05-18 21:31:07",
    "updated_at":"2019-05-18 21:31:07",
    "deleted_at":null
}

现在,我也想将邀请信息以及邀请对象归还给客人。我可以通过修改show函数来实现此目的:

public function show(Invite $invite)
{
    // Don't remove this line:
    $invite->guests = $invite->guests;

    return response($invite->jsonSerialize(), Response::HTTP_CREATED);
}

这可以正常工作,但实际上并没有任何作用。我很容易看到自己后来无意中删除了它并破坏了API,因此发表了评论。有更可读的替代方法吗?

1 个答案:

答案 0 :(得分:1)

使用lazy eager loading加载guests关系:

public function show(Invite $invite)
{
    return response($invite->load('guests')->jsonSerialize(), Response::HTTP_CREATED);
}