Метод whereJsonLength
Метод whereJsonLength применяется к запросу Eloquent
или Query Builder и добавляет условие, проверяющее длину
JSON-массива в указанном поле. Первым параметром передаётся
имя колонки с JSON-данными, вторым - оператор сравнения,
третьим - значение длины. Если оператор не указан,
используется оператор равенства.
Данный метод особенно полезен при работе с полями типа
json или jsonb, когда нужно найти записи
с определённым количеством элементов в массиве. Например,
можно выбрать все статьи с определённым количеством тегов
или товары с заданным числом характеристик.
Синтаксис
<?php
Model::whereJsonLength($column, $operator, $value);
?>
Пример с оператором равенства
Давайте отфильтруем статьи, у которых поле 'tags'
является JSON-массивом ровно из 3 элементов:
<?php
use AppModelsArticle;
$articles = Article::whereJsonLength('tags', 3)->get();
foreach ($articles as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"Article 1"
"Article 4"
"Article 7"
Пример с оператором больше
Давайте выберем товары, у которых количество характеристик
в JSON-поле 'attributes' больше 5:
<?php
use AppModelsProduct;
$products = Product::whereJsonLength('attributes', '>', 5)->get();
foreach ($products as $product) {
echo $product->name;
}
?>
Результат выполнения кода:
"Product 2"
"Product 5"
Пример с оператором между
Давайте найдём пользователей, у которых количество записей
в JSON-поле 'posts' находится в диапазоне
от 2 до 5 включительно:
<?php
use AppModelsUser;
$users = User::whereJsonLength('posts', '>=', 2)
->whereJsonLength('posts', '<=', 5)
->get();
foreach ($users as $user) {
echo $user->name;
}
?>
Результат выполнения кода:
"User 3"
"User 6"
Пример с оператором неравенства
Давайте отфильтруем посты, у которых количество комментариев
в JSON-поле 'comments' не равно 0:
<?php
use AppModelsPost;
$posts = Post::whereJsonLength('comments', '!=', 0)->get();
foreach ($posts as $post) {
echo $post->title;
}
?>
Результат выполнения кода:
"Post 1"
"Post 3"
Пример с нулевой длиной массива
Давайте найдём все записи, у которых JSON-поле 'items'
является пустым массивом:
<?php
use AppModelsOrder;
$orders = Order::whereJsonLength('items', 0)->get();
foreach ($orders as $order) {
echo $order->id;
}
?>
Результат выполнения кода:
"5"
"8"
"12"
Смотрите также
-
метод
whereJsonContains,
который проверяет наличие значения в JSON-массиве -
метод
where,
который добавляет базовое условие фильтрации -
метод
orWhere,
который добавляет условие через ИЛИ -
метод
get,
который выполняет запрос и возвращает коллекцию