转换 Laravel Eloquent 结果

gui*_*sen 3 laravel eloquent

当我在控制器中执行此操作时

$data = User::with('teams')->find(2);
return response(['data' => $data]);
Run Code Online (Sandbox Code Playgroud)

我得到这个结果

{
        "id": 2,
        "country_id": 1,
        "first_name": "John",
        "last_name": "Doe",
        "created_at": "-0001-11-30 00:00:00",
        "updated_at": "2015-02-02 23:08:21",
        "full_name": "John Doe",
        "teams": [
            {
                "id": 1,
                "name": "Helpdesk medewerker",
                "description": ""
            },
            {
                "id": 2,
                "name": "Retentie",
                "description": ""
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

我对完整teams数据不感兴趣,只对teamNames用户的数据感兴趣。

我通过添加这个来做到这一点

$data->each(function($user) {
   $user->team_names = $user->teams->lists('name');
   unset($user->teams);
});
Run Code Online (Sandbox Code Playgroud)

我想知道这是否是修改雄辩结果的正确方法。

luk*_*ter 5

您可以为此使用属性访问器。将其添加到您的模型中:

protected $hidden = ['teams']; // hide teams relation in JSON output
protected $appends = ['team_names']; // add custom attribute to JSON output

public function getTeamNamesAttribute(){
    return $this->teams->lists('name');
}
Run Code Online (Sandbox Code Playgroud)

要动态更改hiddenappends您可以使用 setter 方法:

$data = User::with('teams')->find(2);
$data->setHidden(['teams']);
Run Code Online (Sandbox Code Playgroud)