Todos los modelos se pueden crear en Laravel mediante asignación masiva:

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

¿Dónde se puede encontrar el código de este método en Laravel 5.6?

Busqué en la clase Illuminate\Database\Eloquent\Model pero no pude encontrar un método create.

También verifiqué todos los rasgos (desde HasAttributes hasta GuardsAttributes) pero tampoco encontré un método create allí.

enter image description here

Como la clase model no extiende ninguna otra clase, estoy un poco perplejo cuando el método create está oculto.

0
Adam 9 may. 2019 a las 17:34

3 respuestas

La mejor respuesta

El Modelo Eloquent usa métodos mágicos (__call, __callStatic) para pasar las llamadas a la clase Eloquent Builder. Por lo tanto, Model :: create () en realidad está pasando la llamada al método Builder :: create ().

Sin embargo, si investiga ese método, es básicamente lo mismo que llamar:

$model = new Model($attributes);
$model->save();

Este mixin del (Query) Builder a través de passthrough es lo que le permite utilizar métodos de consulta como Model::where()

5
Devon 9 may. 2019 a las 14:42

Puede encontrarlo en github aquí

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);
    });
}
2
Maraboc 9 may. 2019 a las 14:41

Verifique el siguiente archivo

PATH_TO_PROJECT/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php

1
Neel Bhanushali 9 may. 2019 a las 14:38