1
假设我们有两个模型:Users
和Posts
。 这些模型之间定义了多对多的关系 - 用户可以有许多帖子,帖子可以有许多编辑者(用户)。有没有办法将作业委托给Laravel中的另一项操作?
当这个表格被提交到PostsController
,它的store
行动不仅必须处理新的职位的领域,而且它的编辑,这似乎是错误的。例子:
public function store()
{
// creating a post
$post = Post::create(request()->get('post_fields'));
// adding editors to the post (this should be done somewhere else)
$editors = request()->get('editors');
foreach($editors as $editor){
$post->editors()->attach($editor->id);
}
return redirect('/');
}
正如我已经提到的,这种做法似乎是错误的,笨拙的我。正因为如此,我想代表编辑处理任务到PostsEditorsController
,这将是一个单独的控制器专用于posts-editors
关系管理。所以store
现在是这个样子:
public function store()
{
// creating a post
$post = Post::create(request()->get('post_fields'));
$editors = request()->get('editors');
PostsEditorsController::doSomething($post, $editors); // <-- just to show what I want to achieve
return redirect('/');
}
我怎样才能做到这一点?
这是解决此问题的好方法,但我认为使用控制器来完成这项工作感觉更自然。另外,你会在其他没有事件发生的框架中做什么?纠正我,如果我错了。 –
你说得对,用事件处理控制器数据可能有点尴尬,但试图进一步简化这个可能会有些荒谬。您可以通过执行'$ post-> sync('editors',$ editors-> pluck('id'));',IIRC来轻松地将它们汇总成一行。这是一条线 - 不会变得更简单。 – Josh
这个问题更多关于**应该在哪里完成,而不是**如何**。所以,'$ post-> sync('editors',$ editors-> pluck('id'));'必须留在'store'行为中,还是应该到别的地方去?如果我们在'store'方法中有更多的“副作用”,它应该只存储发布数据,它会变得非常庞大。对不起,如果我不够清楚。 –