Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了啥?
Posted
技术标签:
【中文标题】Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了啥?【英文标题】: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 中搜索并没有给我任何类似的东西。请解释一下,它是如何工作的,它在幕后调用了什么。
谢谢。
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章
在使用 tinker CLI 时,Laravel 如何在 Eloquent 模型上查找和显示动态属性?
如何使用 eloquent / etc 与 laravel 编写关系函数?