Поиск значения в массиве в полях MySQL JSON (Laravel / Lumen)

0

У меня возникают проблемы с поиском значения в массиве (путей к изображениям) в поле MySQL JSON. Я хочу проверить, сохранен ли путь к изображению в базе данных, чтобы предотвратить удаление файла.

Функции контроллера Я попытался:

public function checkImage($filename){
    $content = Content::whereRaw('JSON_CONTAINS(images->"$.path", lAeH88gIv4HeycQXHeMbT8yOyydybbOVhsSq9eAx.jpeg')->exists();
    $content = Content::whereRaw('json_contains(images->path, \'["lAeH88gIv4HeycQXHeMbT8yOyydybbOVhsSq9eAx.jpeg"]\')')->exists();
    $content = Content::whereRaw('json_contains(images->path, \'["' . $filename . '"]\')')->exists();
    $content = Content::whereRaw('json_contains(images, \'["' . $filename . '"]\')')->exists();
    return response()->json($content);
}

Пример JSON:

{
    "id": 4,
    "images": [
        {
            "path": "abc/abc123.jpg",
            "caption": "text",
            "credits": "text"
        },
        {
            "path": "abc/xyz123.jpg",
            "caption": "text",
            "credits": "text"
        },
        {
            "path": "abc/827364527.jpg",
            "caption": "text",
            "credits": "text"
        }
    ],
    "created_at": "2017-12-20 11:40:16",
    "updated_at": "2018-01-04 12:46:37"
}
Теги:
laravel-query-builder
lumen

1 ответ

0

Я нашел решение. Ниже моей функции контроллера:

public function checkIfImageExists(){
$content = Content::where('images', 'like',  '%image-name-123.jpg%')->exists();
return response()->json($content);
}

Функции возвращают true, если изображение используется в поле JSON базы данных. False, если он не используется.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню