Метод whereJsonContains
Метод whereJsonContains применяется к запросу Eloquent
или Query Builder и добавляет условие проверки наличия
указанного значения в JSON-поле. Он полезен при работе
с полями типа JSON или JSONB в базе данных.
Метод принимает два параметра: имя JSON-колонки и искомое
значение. В зависимости от используемой базы данных,
генерируется соответствующий SQL-оператор (->> или JSON_CONTAINS).
Синтаксис
<?php
Model::whereJsonContains($column, $value);
?>
Пример
Давайте найдём пользователей, у которых в JSON-поле 'options'
содержится значение 'premium':
<?php
use AppModelsUser;
$users = User::whereJsonContains('options', 'premium')->get();
foreach ($users as $user) {
echo $user->name;
}
?>
Результат выполнения кода:
["John Doe", "Jane Smith", "Bob Johnson"]
Пример
Давайте найдём статьи, у которых в JSON-поле 'tags'
присутствует значение 'laravel':
<?php
use AppModelsArticle;
$articles = Article::whereJsonContains('tags', 'laravel')->get();
foreach ($articles as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
["Laravel Basics", "Advanced Laravel", "Laravel JSON Fields"]
Пример
Давайте используем метод whereJsonContains
совместно с другими условиями для более точной фильтрации:
<?php
use AppModelsProduct;
$products = Product::where('status', 'active')
->whereJsonContains('attributes', 'premium')
->get();
foreach ($products as $product) {
echo $product->name;
}
?>
Результат выполнения кода:
["Premium Widget", "Deluxe Gadget", "Pro Toolkit"]