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'方法中有更多的「副作用」,它應該只存儲發佈數據,它會變得非常龐大。對不起,如果我不夠清楚。 –