雄辩模型的创建方法在哪里?

时间:2019-05-09 14:34:06

标签: php laravel laravel-5

mass assignment可以在Laravel中创建每个模型:

$flight = App\Flight::create(['name' => 'Flight 10']);

在Laravel 5.6中哪里可以找到此方法的代码?

我查看了Illuminate\Database\Eloquent\Model类,但是找不到create方法。

我还检查了所有特征(从HasAttributesGuardsAttributes),但是我也没有找到create方法。

enter image description here

由于类model没有扩展任何其他类,我对隐藏create方法的地方感到有些困惑。

3 个答案:

答案 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);
    });
}