【问题标题】:What happened to Laravel's Eloquent public static function "create" in Model.php?Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了什么?
【发布时间】:2018-05-09 14:32:57
【问题描述】:

在 Laravel 5.x 的早期版本中(我不确定它何时更改),我能够在任何 Eloquent 模型类上调用静态方法 create 将记录插入数据库。

例如:

EloquentUser::create([
    'name' => self::ADMIN_NAME,
    'email' => self::ADMIN_EMAIL,
    'password' => bcrypt(self::ADMIN_PASSWORD),
]);

那是在 Model.php (vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php) 中调用 public static function create

public static function create(array $attributes = [])
{
    $model = new static($attributes);

    $model->save();

    return $model;
}

在 Laravel 5.5 中我仍然可以调用 create 但是 Model.php 完全重新排列并且不包含此方法。更重要的是,在整个供应商 / Illuminate 中搜索并没有给我任何类似的东西。请解释一下,它是如何工作的,它在幕后调用了什么。

谢谢。

【问题讨论】:

    标签: php laravel laravel-5 illuminate-container


    【解决方案1】:

    Eloquent 的 _call_callStatic 将调用转发到 Eloquent Builder 实例。 create 方法已从模型移出并移入构建器。

    Illuminate\Database\Eloquent\Model::__callStatic -> __call -> newQuery -> Illuminate\Database\Eloquent\Builder@create

    【讨论】:

    • 感谢您的解释!
    【解决方案2】:

    Model 使用 QueryBuilder 使用 EloquentBuilder 方法代码所在的位置。查找特定属性或方法的最佳方式是使用framework api docs

    【讨论】:

      猜你喜欢
      • 2019-10-02
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      相关资源
      最近更新 更多