Использование laravel query builder без жесткой привязки к именам таблиц

Проблема:

Иногда может возникнуть необходимость использовать Laravel query builder вместо Eloquent либо из-за проблем с производительностью, либо из-за сложности запроса. Первая проблема, с которой вы могли столкнуться при использовании построителя запросов, может заключаться в жестком кодировании имен таблиц везде, где вы хотите использовать запрос.

$users = \DB::table('users')->get();

Приведенный выше код будет работать идеально, пока вы не использовали этот фрагмент кода во многих местах, и теперь вы хотите изменить имя своих таблиц. В нашем случае, мы можем захотеть изменить имя нашей таблицы с users на membersпоэтому нам нужно найти все запросы и изменить все их имена таблиц на members :

$users = \DB::table('members')->get();

Решение:

Решение действительно простое и понятное. Laravel предоставляет открытый метод, вызываемый getTable для всех моделей, расширяющих Illuminate\Database\Eloquent\Model класс.

Прежде всего, вам нужно создать экземпляр модели вручную:

$users = \DB::table((new \App\Models\User)->getTable())->get();

Кроме того, сервисный контейнер Laravel может сделать это за вас:

$users = \DB::table(app()->make(\App\Models\User::class)->getTable())->get();

Теперь если вы хотите изменить имя таблицы пользовательской модели вы можете легко использовать защищенное свойство в модели под названием table:

// in the app/models/User.php file
protected $table = 'members';

Спасибо, что прочитали эту статью! Надеюсь, вам понравилось :)

https://armancodes.medium.com/use-laravel-query-builder-without-hard-coding-the-table-names-72eb098e3b28

Рейтинг
( 5 оценок, среднее 4.2 из 5 )
Maxyc Webber/ автор статьи
Мне 35 лет. Опыт профессиональной разработки 15 лет. Занимаюсь разработкой и поддержкой корпоративных систем автоматизации бизнеса, а также высоконагруженными проектами. Мне нравится решать нестандартные проблемы бизнеса. Имею опыт формирования команд под проект, налаживания процесса разработки, коммуникации программистов и заказчиков. Есть опыт работы с зарубежными заказчиками (ОАЭ, Польша, Германия, Швейцария).
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.