在控制器中,我使用此代码来获取所有Text
对象及其关联的authors
return Text::with('authors')->get();
这是仅适用于管理员的后端的一部分,我需要他们能够访问作者name
字段。但是在Author
模型中,当我为标准用户编写应用程序的另一部分时,我设置了protected $hidden = ['name'];
。
存在hasMany
关系:每个文本都有很多作者。有没有一种使用with
的方法,但是却获得了一些隐藏的属性?还是相反,在使用with
时将某些属性声明为暂时隐藏?
请注意,这是关于将with
与隐藏属性结合使用的问题。我不是在寻找类似$authors = $authors->makeVisible(['name']);
(解释为here)的东西。
答案 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();