Что случилось с публичной статической функцией Laravel Eloquent "create" в Model.php?

В предыдущих версиях Laravel 5.x (я не уверен, когда он был изменен) я мог вызывать статический метод create в любом классе Eloquent Model для вставки записей в базу данных.

Например:

EloquentUser::create([
    'name' => self::ADMIN_NAME,
    'email' => self::ADMIN_EMAIL,
    'password' => bcrypt(self::ADMIN_PASSWORD),
]);

Это звало public static function create в Model.php (vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php).

public static function create(array $attributes = [])
{
    $model = new static($attributes);

    $model->save();

    return $model;
}

В Laravel 5.5 я еще могу звонить create однако Model.php полностью переставлен и не содержит этот метод. Что еще более важно, поиск по всему продавцу / Illuminate не дает мне ничего подобного. Пожалуйста, объясните, как это все еще работает, что это вызывает за кадром.

Благодарю.

2 ответа

Решение

Красноречивый-х _call а также _callStatic переадресация вызовов на экземпляр Eloquent Builder. create Метод был перемещен из Модели в Строитель.

Illuminate\Database\Eloquent\Model::__callStatic -> __call -> newQuery -> Illuminate\Database\Eloquent\Builder@create

Модель использует QueryBuilder, который использует EloquentBuilder, где код метода. Лучший способ найти конкретные свойства или методы - это использовать api docs.

Другие вопросы по тегам