Освоение связей между областью действия Laravel: упростите запросы к базе данных

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

  1. Основные отношения области действия.
    Один из самых простых способов использования отношений области действия в Laravel — это определение базового метода области действия в вашей модели. Этот метод можно использовать для инкапсуляции общих ограничений запроса. Например, предположим, что у нас есть модель «Пользователь» с «активной» областью действия:
class User extends Model
{
    public function scopeActive($query)
    {
        return $query->where('active', true);
    }
}

Теперь вы можете легко получить активных пользователей, используя область:

$activeUsers = User::active()->get();
  1. Динамические связи области действия.
    Laravel также позволяет создавать динамические связи области действия, которые могут принимать параметры и применять различные ограничения запроса на основе предоставленных значений. Давайте расширим наш предыдущий пример, включив в него метод “scopeRole”, который фильтрует пользователей по их роли:
class User extends Model
{
    public function scopeRole($query, $role)
    {
        return $query->where('role', $role);
    }
}

Теперь вы можете выбирать пользователей по их роли:

$admins = User::role('admin')->get();
$managers = User::role('manager')->get();
  1. Объединение связей области действия:
    Laravel позволяет объединять несколько связей области действия для дальнейшего уточнения запросов. Это позволяет создавать сложные ограничения запросов в модульной и читаемой форме. Вот пример:
class User extends Model
{
    public function scopeActive($query)
    {
        return $query->where('active', true);
    }
    public function scopeRole($query, $role)
    {
        return $query->where('role', $role);
    }
}

Теперь вы можете объединить методы области для фильтрации пользователей:

$activeAdmins = User::active()->role('admin')->get();
  1. Отношения глобальной области действия:
    В дополнение к связям локальной области Laravel обеспечивает отношения глобальной области действия. Глобальные области автоматически применяются ко всем запросам к модели. Они могут быть полезны для применения общих ограничений в вашем приложении. Вот пример глобальной области, которая отфильтровывает обратимо удаленные записи:
class User extends Model
{
    protected static function booted()
    {
        static::addGlobalScope('notDeleted', function ($query) {
            $query->where('deleted_at', null);
        });
    }
}

Связи областей действия Laravel — это мощная функция, которая упрощает запросы к базе данных за счет инкапсуляции общих ограничений в ваши модели. В этой статье мы рассмотрели различные методы, в том числе базовые отношения области, динамические отношения области, цепочку отношений области и отношения глобальной области. Используя эти методы, вы сможете писать более чистый и эффективный код при работе с Eloquent ORM от Laravel.