delete()在laravel 8控制器上不起作用[重复]

Posted

技术标签:

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

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

public function destroy(Blogpost $blog)

    $blog->delete();
    
    return redirect()->route('blog.index');

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于delete()在laravel 8控制器上不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

UIScreenEdgePanGestureRecognizer 在 iOS 8 上不起作用

为啥 Laravel 发布方法在路由器页面上不起作用?

为啥外部链接在构建后在 phonegap 应用程序上不起作用

子域路由在 Laravel 5 上不起作用 - WAMPServer

Laravel 7 Auth 在托管站点上不起作用

Laravel 4.2 Route HTTPS 在服务器上不起作用