Где находится метод создания Eloquent Model? - PullRequest
0 голосов
/ 09 мая 2019

Каждая модель может быть создана в Laravel с помощью массового задания :

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

Где можно найти код этого метода в Laravel 5.6?

Я посмотрелв классе Illuminate\Database\Eloquent\Model, но я не смог найти метод create.

Я также проверил все черты (от HasAttributes до GuardsAttributes), но не нашел там и метода create.

enter image description here

Поскольку класс model не расширяет другие классы, я немного озадачен, когда метод create скрыт.

Ответы [ 3 ]

5 голосов
/ 09 мая 2019

Eloquent Model использует магические методы (__call, __callStatic) для передачи вызовов в класс Eloquent Builder.Следовательно, Model :: create () фактически передает вызов методу Builder :: create ().

Однако, если вы исследуете этот метод, он в основном совпадает с вызовом:

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

Этот миксин (Query) Builder через passthrough - то, что позволяет вам использовать методы запроса, такие как Model::where()

3 голосов
/ 09 мая 2019

Проверить следующий файл

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

2 голосов
/ 09 мая 2019

Вы можете найти его в github здесь

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);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...