我的Laravel專案有一個名為Blogpost的資源控制器, 在銷毀方法中, $blogpost->delete()的方法不作業。但如果我使用DB查詢,它就能正常作業。見下面的代碼。
這個方法不起作用:
public function destroy(Blogpost $blogpost)
{
$blogpost->洗掉()。
return redirect()-> route('blog.index')。
}
這樣做效果很好:
public function destroy($id)
{
$post = Blogpost::find($id)。
$post->洗掉()。
return redirect()-> route('blog.index')。
}
在routesweb.php中,我為這個控制器使用資源路由。
Route::resource('blog', BlogpostController::class);
注意:Blogpost模型與postViews模型有一個hasMany()關系。
public function postViews()
{
return $this->hasMany(PostViews::class)。
}
注意:post_views表與blogpost表有一個外鍵關聯。請看下面的遷移:
$table-> foreign('blogpost_id')
->參考('id')
->on('blogposts')
->onDelete('cascade')。
如果我使用dd($blogpost);它回傳模型。
代碼:
public function destroy(Blogpost $blogpost)
{
dd($blogpost)。
}
輸出:
我的問題是,為什么$blogpost->delete();方法不起作用?是不是因為hasMany()關系?
PS:我有另一個名為Category的資源控制器,其中的$category->delete()方法完美地作業。
uj5u.com熱心網友回復:
TL;DR 將你的destroy方法改為:
public function destroy(Blogpost $blog)
{
$blog->洗掉()。
return redirect()-> route('blog.index')。
}
我想這是由于你的路由引數是blog,但你的控制器引數是$blogpost,也就是說,它們不匹配。
如果你輸入了一個控制器方法引數, Laravel會嘗試從容器中決議出一個實體. 這就是為什么你會得到一個Blogpost的實體,但不是你想要的加載實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324233.html
標籤:

