在早期版本的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给了我这样的东西。请解释,它是如何工作的,它在幕后所谓的。
感谢。
答案 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。