【问题标题】:Laravel BadMethodCallException on delete()删除()上的 Laravel BadMethodCallException
【发布时间】:2021-12-29 05:28:59
【问题描述】:

无法对 find() 执行删除,

BadMethodCallException 调用未定义的方法 App\Models\Task::ondeletemodel().

但是当使用它的工作时。

    public function delete($id)
    {
            Task::find($id)->delete(); //error
            // Task::where('id', $id)->delete(); //not error 
            session()->flash('message', 'Task Deleted Successfully.');
    }

已编辑:这是我的 uuid 特征:

namespace App\Http\Traits;

use Facades\Str;

trait UseUuid
{
    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            $model->uuid = unique_str($model);
        });

        static::deleting(function ($model) 
        {
            $model->ondeletemodel($model);
        });
    }
}

【问题讨论】:

  • 请您出示您的Task 型号以及您为其设置的任何Observers 的代码。
  • 请你也展示一下UseUuid trait 中发生了什么。您是否为此模型设置了Observer

标签: laravel eloquent laravel-query-builder


【解决方案1】:

如错误消息中所示:

use App\Http\Traits\UseUuid 中,您可能已经定义了一个要在ondeletemodel 上触发的侦听器,但在特征或任务模型中没有这样命名的方法

【讨论】:

  • 我已经编辑了我的问题。我认为这是 boot() 中的 static::deleting
  • 你可以摆脱整个 static::deleting 块,因为它什么都不做
  • 谢谢我会努力的
  • @juniorFrogie 你试过了吗?
  • 是的,删除后它现在可以工作了。
【解决方案2】:
$tasks = Task::find($id);
$task->users->detach();
$tasks->delete();
session()->flash('message', 'Task Deleted Successfully.');

【讨论】:

  • 请添加一些关于问题所在以及此代码如何解决问题的说明。
猜你喜欢
  • 2018-08-10
  • 1970-01-01
  • 2021-10-06
  • 2013-10-28
  • 2020-05-03
  • 1970-01-01
  • 2017-10-27
  • 2018-11-12
  • 2018-06-17
相关资源
最近更新 更多