«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Красноречивый трюк: модель Laravel из подзапроса

Красноречивый трюк: модель Laravel из подзапроса

Опубликовано 3 ноября 2024 г.
Просматривать:943

Eloquent Trick: Laravel Model from Subquery

В Laravel принято определять соответствующую таблицу модели с помощью свойства table, например:

class User extends Model {
  protected $table = 'users';
}

Однако вместо непосредственного сопоставления с таблицей мы можем использовать подзапрос. Этот метод позволяет нам инкапсулировать сложные запросы на уровне приложения, подобно созданию представления базы данных, но с дополнительной гибкостью операций Eloquent.

Например, рассмотрим таблицу пользователей, в которой хранится информация как об администраторах, так и об обычных пользователях. Мы можем создать модель AdminUser, используя подзапрос:

class AdminUser
{
    public function getTable(): string|\Illuminate\Contracts\Database\Query\Expression
    {
        $sql = User::query()
            ->select('id', 'name')
            ->where('admin_user', true)
            ->toRawSql();

        return DB::raw(sprintf('(%s) as admin_users', $sql));
    } 
}

Эта модель извлекает данные из подзапроса (выберите идентификатор, имя пользователя, где admin_user = 1), что позволяет вам запрашивать его так же, как стандартная модель:

AdminUser::query()->get();

или

AdminUser::query()->first();

Однако имейте в виду, что некоторые запросы, например find(1), не будут работать напрямую:

AdminUser::query()->find(1);

Чтобы обойти эту проблему, вы можете использовать условиеwhere в сочетании с first():

AdminUser::query()->where('id', 1)->first();

Заключение

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

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/bedram-tamang/eloquent-trick-laravel-model-from-subquery-4im6?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3