【发布时间】:2021-11-13 21:58:03
【问题描述】:
我的 Laravel 项目有一个名为 Blogpost 的资源控制器,在 destroy 方法中,$blogpost->delete() 方法不起作用。但是如果我使用 DB Query,它工作得很好。请参阅下面的代码。
这不起作用:
public function destroy(Blogpost $blogpost)
{
$blogpost->delete();
return redirect()->route('blog.index');
}
效果很好:
public function destroy($id)
{
$post = Blogpost::find($id);
$post->delete();
return redirect()->route('blog.index');
}
在 routes\web.php 中,我正在为这个控制器使用资源路由。
Route::resource('blog', BlogpostController::class);
注意: Blogpost 模型与 postViews 模型具有 hasMany() 关系。
public function postViews()
{
return $this->hasMany(PostViews::class);
}
注意:post_views 表有一个与 blogpost 表关联的外键。请参阅下面的迁移:
$table->foreign('blogpost_id')
->references('id')
->on('blogposts')
->onDelete('cascade');
如果我使用dd($blogpost);,它会返回模型。
代码:
public function destroy(Blogpost $blogpost)
{
dd($blogpost);
}
输出:
我的问题是,为什么$blogpost->delete(); 方法不起作用?是因为 hasMany() 关系吗?
PS:我有另一个名为 Category 的资源控制器,$category->delete() 方法在其中完美运行。
【问题讨论】:
-
我猜你的路由参数叫做 {id} 而
$blogpost是空的?你有错误吗?试试dd($blogpost) -
嗨@gert b,我正在使用资源路由。代码:Route::resource('blog', BlogpostController::class);
-
你
dd($blogpost)了吗?你有错误吗? -
嗨@GertB。我刚刚做了 dd($blogpost),它返回 App\Models\Blogposts。看到这个截图:link
标签: php laravel eloquent laravel-8