atom1c.ru

Laravel Eloquent Query. Условия запросов в отношениях

Условие where

// Условие с одним значением
->where($column, $value)

// Условие с оператором
->where($column, $operator, $value)

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


Условие orWhere

$query->where(function ($query) {
    $query->where('gender', 'Male')
          ->where('age', '>=', 18);
})
->orWhere(function($query) {
    $query->where('gender', 'Female')
          ->where('age', '>=', 65);
});

Описание: Метод orWhere добавляет альтернативное условие в запрос. Полезен для создания сложных запросов с логикой "ИЛИ".


Скоуп orWhere

$users = App\User::popular()->orWhere->active()->get();

Описание: Использование глобальных или локальных скоупов вместе с orWhere позволяет строить запросы с переиспользуемой логикой.


Цепочка условий orWhere

$q->orWhere(['b' => 2, 'c' => 3]);

Описание: Цепочка условий orWhere позволяет добавлять несколько альтернативных условий с массивом ключ-значение.


Кастомные условия

->where(function ($query) use ($activated) {
    $query->where('activated', '=', $activated);
})->get();

->where(function($query) {
    if ($query->isProduct()) $query->has('product');
    else $query->has('subscription');
});

Описание: Метод where поддерживает кастомные условия с использованием замыканий, что позволяет динамически управлять логикой запросов.


Условие whereNull и whereNotNull

// Условие для проверки на NULL
->whereNull($column)

// Условие для проверки на НЕ NULL
->whereNotNull($column)

Описание: Эти методы позволяют проверять значения в столбцах на NULL или его отсутствие.


Условие whereBetween и whereNotBetween

// Проверка на диапазон
->whereBetween($column, [100,200])

// Исключение из диапазона
->whereNotBetween($column, [100,200])

Описание: Методы whereBetween и whereNotBetween используются для фильтрации данных на основе диапазонов значений.


Условие whereIn и whereNotIn

// Проверка на соответствие массиву значений
->whereIn($column, [1,2])

// Исключение значений из массива
->whereNotIn($column, [1,2])

Описание: Методы для фильтрации данных, которые соответствуют (или не соответствуют) значениям из указанного массива.


Условие withWhereHas

->withwherehas('posts')

Описание: Метод withWhereHas объединяет функциональность with и has, позволяя фильтровать связанные модели и загружать их.


Условие when

->when($status, $callback, $default);

->whenEmpty($status, $callback, $default);

->whenNotEmpty($status, $callback, $default);

// Пример с if
->when(true, function ($q) {
    return $q->where('key', 'val');
});

// Пример с if/else
->when(condition, function($c){
    return $c->push(4);
}, function ($c){
    return $c->push(3);
});

Описание: Метод when используется для добавления условий в зависимости от выполнения определенного условия.


Условие unless

->unless($status, $callback, $default);

->unlessEmpty($status, $callback, $default);

->unlessNotEmpty($status, $callback, $default);

Описание: Метод unless работает как противоположность when, добавляя условие только если оно не выполнено.


Условие doesntHave

$posts = App\Post::doesntHave('comments')->get();

$posts = App\Post::whereDoesntHave('comments', function (Builder $query) {
    $query->where('content', 'foo');
})->get();

Product::doesntHave('categories')
       ->orDoesntHave('countries')
       ->get();

Product::whereDoesntHave('categories', function($q) {
    $query->where('content', 'foo');
})
->orWhereDoesntHave('countries', function($q) {
    $query->where('content', 'foo');
})->get();

Описание: Метод doesntHave используется для фильтрации моделей, у которых нет определенных связей.


Коллекции: проверка на объект

collect([new User, new Post])->whereInstanceOf(User::class);

Описание: Метод whereInstanceOf позволяет фильтровать коллекции, оставляя только элементы определенного класса.

Laravel предоставляет гибкие методы для построения запросов, такие как where, orWhere, whereIn, when и другие. Они позволяют создавать сложные условия для выборки данных, включая работу с NULL, массивами, диапазонами и кастомными замыканиями.