Проблема:
Иногда может потребоваться использовать построитель запросов 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 для имен таблиц, но эта статья предназначена для предотвращения жесткого кодирования имен таблиц в бизнес-логика вашего приложения.
Спасибо, что прочитали эту статью! Надеюсь, вам понравилось :)