获取使用Model :: with()指定的模型的隐藏属性

时间:2019-09-27 14:04:14

标签: laravel laravel-5 eloquent

在控制器中,我使用此代码来获取所有Text对象及其关联的authors

return Text::with('authors')->get();

这是仅适用于管理员的后端的一部分,我需要他们能够访问作者name字段。但是在Author模型中,当我为标准用户编写应用程序的另一部分时,我设置了protected $hidden = ['name'];

存在hasMany关系:每个文本都有很多作者。有没有一种使用with的方法,但是却获得了一些隐藏的属性?还是相反,在使用with时将某些属性声明为暂时隐藏?

请注意,这是关于将with与隐藏属性结合使用的问题。我不是在寻找类似$authors = $authors->makeVisible(['name']);(解释为here)的东西。

2 个答案:

答案 0 :(得分:1)

我可以找到两种方法来解决我的问题:

1)使用#5069中的each

$texts = Text::with('authors')
             ->get()
             ->each(function ($text) {
    $text->authors->makeVisible(['name']);
});

2)按照this question中的建议,使用transform()来回答相同的问题。这似乎更快。

$texts = Text::with('authors')
             ->get()
             ->transform(function ($text) {
    $text->authors->makeVisible(['name']);
    return $text;
});

答案 1 :(得分:0)

尝试以下代码:

Text::with(['author'=>function($q){
$q->makeVisible('name')
}])->get();