gpt4 book ai didi

php - Laravel - 无法覆盖模型的创建方法

转载 作者:行者123 更新时间:2023-12-04 12:18:29 24 4
gpt4 key购买 nike

覆盖基本 Laravel 模型创建方法时,应用程序失败。不会将错误发送回浏览器,并且服务器日志为空。奇怪的是,它在没有覆盖的情况下工作得很好。不知道我做错了什么。

简化的 Controller 功能:

public function save(Request $request, $id = 0) {
$myModel = MyModel::find($id);
$data = $request->all();

if (!$myModel) // Create a new row
{
$myModel = MyModel::create($data);
}

// ...
}

这工作正常,直到我将此函数添加到模型中:
class MyModel extends Model
{
// ...

public static function create($attributes = [])
{
return parent::create($attributes);
}

// ...
}

只是为了澄清,我不是在寻找一种不同的方式来实现这一点。我只需要知道为什么家长电话对我来说失败了。

这是一些服务器信息...
  • 服务器操作系统:Windows 7(带有 XAMPP 的个人 PC)
  • Laravel 版本 5.4.15
  • PHP 版本 5.6.30
  • 最佳答案

    解释是公共(public)静态函数 create() 没有在 Illuminate\Database\Eloquent\Model 中定义。类(class)。
    作为动态方法调用处理,即通过调用函数来处理:

    public static function __callStatic($method, $parameters)
    Illuminate\Database\Eloquent\Model类(class)。
    末了 create()函数在 Illuminate\Database\Query\Builder 中定义类(class)。
    这就是您不能在模型中覆盖它并调用 parent::create() 的原因
    恕我直言,我还没有完全测试过,你可以尝试:
    public static function create($attributes)
    {
    return (new static)->newQuery()->create($attributes);
    }

    关于php - Laravel - 无法覆盖模型的创建方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43124879/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com