在Model.php中,Laravel的Eloquent公共静态函数“创建”发生了什么?

时间:2017-11-26 02:44:37

标签: php laravel laravel-5 illuminate-container

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

例如:

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

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

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

    $model->save();

    return $model;
}

在Laravel 5.5中,我仍然可以调用create,但 Model.php 完全重新排列,不包含此方法。更重要的是,在整个供应商中搜索/ Illuminate给了我这样的东西。请解释,它是如何工作的,它在幕后所谓的。

enter image description here

感谢。

2 个答案:

答案 0 :(得分:5)

Eloquent的_call_callStatic正在转发对Eloquent Builder实例的调用。 create方法已移出模型并进入构建器。

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

答案 1 :(得分:0)

Model使用QueryBuilder,其中EloquentBuilder使用方法的代码。查找特定属性或方法的最佳方法是使用framework api docs