Использование 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 )
Максим Гречушников/ автор статьи
Мне 40 лет, и больше половины жизни я занимаюсь разработкой. За это время я работал с корпоративными системами, highload-проектами, интеграциями, платежными решениями, внутренними платформами и legacy-кодом, который пережил не одного разработчика. Некоторые системы, кажется, переживут и нас. Моя специализация — PHP, Laravel, backend-архитектура, DDD, тестирование, рефакторинг и техническое лидерство. Мне интересны задачи, где нужно соединить код, бизнес, данные, процессы и здравый смысл. Последние годы я много работаю с LLM и AI-инструментами: использую их для проектирования, анализа кода, документации, тестов, ревью, работы с legacy и построения инженерных процессов. Для меня LLM — это не замена разработчику, а усилитель для тех, кто умеет думать системно. В блоге я пишу о Laravel, PHP, архитектуре, тестировании, инженерной практике, управлении разработкой и реальном применении AI в работе программиста.
Понравилась статья? Поделиться с друзьями: