2

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

例如:

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

那是public static function createModel.php ( 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 中搜索并没有给我任何类似的东西。请解释一下,它是如何工作的,它在幕后调用了什么。

在此处输入图像描述

谢谢。

4

2 回答 2

6

Eloquent_call_callStatic正在将调用转发到 Eloquent Builder 实例。该create方法被移出模型并进入构建器。

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

于 2017-11-26T02:53:24.027 回答
0

模型使用QueryBuilder,它在方法代码所在的地方使用EloquentBuilder 。查找特定属性或方法的最佳方法是使用框架 api 文档

于 2017-11-26T11:47:33.697 回答