Проблема:

Иногда может потребоваться использовать построитель запросов Laravel вместо 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';

Примечание. Рекомендуется использовать имя модели + 's для имен таблиц, но эта статья предназначена для предотвращения жесткого кодирования имен таблиц в бизнес-логика вашего приложения.

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