【问题标题】:delete() not working on laravel 8 controller [duplicate]delete()在laravel 8控制器上不起作用[重复]
【发布时间】: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


【解决方案1】:

TL;DR 将您的 destroy 方法更改为:

public function destroy(Blogpost $blog)
{
    $blog->delete();
    
    return redirect()->route('blog.index');
}

我想发生这种情况的原因是因为您的路由参数是blog,但您的控制器参数是$blogpost,即它们不匹配。

如果你输入一个控制器方法参数的提示,Laravel 将尝试从容器中解析出它的 一个 实例。这就是为什么你得到一个Blogpost 的实例而不是你想要的加载实例的原因。 Route model binding 在这里不起作用,因为名称必须匹配。

【讨论】:

    【解决方案2】:

    您没有在控制器中设置模型。并且您在 attributes 和 original 中的输出为 null,因此您无法删除该帖子。现在,首先删除 controller 和 model 然后运行以下命令,然后尝试删除方法:

    php artisan make:controller BlogpostController --resource --model=Blogpost
    

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 2021-07-27
      • 2013-03-28
      • 1970-01-01
      • 2022-09-30
      • 2017-03-05
      • 2015-10-03
      • 2021-05-31
      • 2021-08-15
      相关资源
      最近更新 更多