如何使用Laravel 5暂时隐藏模型关系属性

时间:2016-12-05 19:18:10

标签: laravel laravel-5 eloquent

我已阅读过如何temporarily hide model attributes。 我想暂时隐藏一个模型关系属性。

例如

{
    "slug": "google-chrome",
    "name": "Google Chrome",
    "description": {
         "text": null,
         "created_at": "2016-12-05 12:16:38",
         "updated_at": "2016-12-05 12:16:38"
}

仅在此查询中隐​​藏description.created_at的语法是什么? 在我的SoftwareController中我有

public function show(Request $request, $slug)
{
    $models = Software::query();

    $model =
        $models
        ->where('slug', $slug)
        ->firstOrFail()
        ->makeHidden([
            'description.created_at',
        ]);

    return $model;
}

这种语法似乎不起作用?有可能吗?

1 个答案:

答案 0 :(得分:3)

makeHidden()不支持点表示法。

您应该在相关型号上调用makeHidden:

$model = $models
        ->where('slug', $slug)
        ->firstOrFail();

$model->description->makeHidden('created_at');

请注意,这仅在您有一个结果时才有效。如果你想在Collection上执行此操作,则必须迭代itens并为每个项目运行makeHidden。