Зная, когда это Модель или Строитель (Laravel)

Перейти к профилю EDDYMENS

User::where('id',1)->update([]) а также User::find(1)->update([]) делать то же самое, но по-разному.

э?

При работе с базами данных в Laravel вы обычно либо используете Красноречивый или нижний уровень Свободные запросы.

Eloquent предоставляет способы «объективизации» работы с базами данных с помощью запросов Fluent. Просто поместите его в оболочку для запросов Fluent с дополнительным сыром. 😃.

Некоторые базовые механизмы.

В общем, все, что касается Свободные запросы можно найти в пространстве имен Illuminate\Database\Query\Builder

И все Eloquent под Illuminate\Database\Eloquent\Model

Далее в Красноречивый


Если вы знаете, что знаете 😃

Красноречивый также имеет много частей, главная точка притяжения Класс модели, Свой собственный Класс построителя запросов а также другие важные классы, такие как связи и т.п.

Примеры Теперь давайте попробуем разбить пару запросов.

User::where('id',1) : Это утверждение начинается как красноречивая модель, а затем однажды куда называется возвращенным экземпляром красноречивого построителя, что означает, что вы можете добавить больше методов запроса. Примечание: Красноречивый Строитель расширяет Беглый Query Builder для выполнения своей задачи.

User::find(1) : Этот оператор немедленно возвращает экземпляр модели записи, в которой находится первичный ключ. 1 Примечание: Это вернет красноречивую коллекцию, если несколько идентификаторов будут переданы в найти метод например find([1,2,3]

Итак, первый запрос с куда метод возвращает экземпляр построителя запросов, что означает, что мы можем добавить больше методов построителя запросов по мере продвижения, а также свободный запрос, когда вызываемый метод не существует в классе красноречивого построителя, например: joinметод.

Во втором запросе мы можем добавить методы как модели, так и построителя запросов.

Примечание: Некоторые методы существуют как в классе Builder, так и в классе Model.

Итак, как вы можете себе представить, если у вас есть экземпляр модели, первая точка отсчета метода будет из Модель класс, и если он не будет найден, будет найден из Конструктор запросов. Более или менее похоже на переопределение метода в случае наследования. Но в данном случае волшебный метод __вызов используется для этой проверки #L1602.

И один из таких методов, существующих как в Строитель а также Модель это метод обновления.

Есть несколько отличий в реализации этих обновлений от того, что в Модель возвращает false, если модель не существует, а также позволяет пользователю передавать параметры, например, устанавливать ли временную метку или нет.

Хотя почему это стоит отметить?

Не то чтобы вы хотели это сделать, но скажите, что по какой-то причине вы переопределяете метод обновления в модели. Ну, это означает, что пока у вас есть Модель например, как в нашем примере выше User::find(1)->update([...]ваш переопределенный метод будет выполнен.

Но в этом случае используется другой тип запроса, где Строитель возвращается, ваш метод не будет запускаться как обновление по умолчанию в Строитель будет вызываться вместо этого.

Но, надеюсь, вам не придется переопределять какие-либо методы, а нужно найти другие более чистые способы обработки ситуаций, которые могут возникнуть.

Что я надеюсь пролить свет на этот пост, так это полезность понимания того, как все работает и как это может пригодиться в один прекрасный день. 😃

использованная литература

Осветить\база данных\красноречивый | Ларавель API
_Редактировать описание_laravel.com

Eloquent: Начало работы — Laravel — PHP Framework для веб-мастеров
_Laravel — PHP-фреймворк для веб-мастеров._laravel.com

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *