我面临的情况是我必须从关系实例的控制器调用一个函数。为了更好的解释,我将在下面写一个例子
我有一个Article
控制器,我有一个preview()
功能。
User
可以有多个Article
。
假设preview()
函数解析文本并用用户名替换特殊文本。
所以我的功能看起来像这样
//In ArticleController
public function preview(Article $article , User $user){
return str_replace("username", $user->name , $article->text);
}
但是对于特定情况,我想在列出所有用户时显示文章的预览
所以在UserController中
public function index(){
foreach( User::all() as $user){
echo $user->articles[0]->preview( ... );
}
}
显然这段代码不起作用。
但是当我面对这种需求时,我更关注如何继续前进。
我应该创建一个存储库吗?在其他地方使用此preview()
功能?或者这样做是不是一种坏习惯?当我们面对这个问题时,最好的方法或思维方式是什么?
或者我可能只是错过了Laravel的ORM中的重要内容。 :/
答案 0 :(得分:1)
我认为文章是一个模型。所以你必须向用户添加hasMany关系(用户有很多文章)。在文章中你必须添加预览功能。在这种情况下,您将能够找到$ user->文章(或用户 - >文章)并运行 - >预览功能。这是我猜的最简单的解决方案。
您还可以添加自定义属性(如getPreviewAttribute)并将其附加到文章模型。这样你就可以获得$ user-> article->预览。