Что случилось с публичной статической функцией 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.