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