mass assignment可以在Laravel中创建每个模型:
$flight = App\Flight::create(['name' => 'Flight 10']);
在Laravel 5.6中哪里可以找到此方法的代码?
我查看了Illuminate\Database\Eloquent\Model
类,但是找不到create
方法。
我还检查了所有特征(从HasAttributes
到GuardsAttributes
),但是我也没有找到create
方法。
由于类model
没有扩展任何其他类,我对隐藏create
方法的地方感到有些困惑。
答案 0 :(得分:5)
Eloquent模型使用魔术方法(__call,__ callStatic)将调用传递给Eloquent Builder类。因此,Model :: create()实际上是将调用传递给Builder :: create()方法。
但是,如果您研究该方法,则它基本上与调用相同:
$model = new Model($attributes);
$model->save();
(查询)构建器通过传递的这种混合方式使您可以使用Model::where()
之类的查询方法
答案 1 :(得分:2)
检查以下文件
PATH_TO_PROJECT/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php
答案 2 :(得分:2)
您可以在github here
中找到它public function create(array $attributes = [])
{
return tap($this->newModelInstance($attributes), function ($instance) {
$instance->save();
});
}
/**
* Save a new model and return the instance. Allow mass-assignment.
*
* @param array $attributes
* @return \Illuminate\Database\Eloquent\Model|$this
*/
public function forceCreate(array $attributes)
{
return $this->model->unguarded(function () use ($attributes) {
return $this->newModelInstance()->create($attributes);
});
}