У меня возникают проблемы с поиском значения в массиве (путей к изображениям) в поле 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"
}
Я нашел решение. Ниже моей функции контроллера:
public function checkIfImageExists(){
$content = Content::where('images', 'like', '%image-name-123.jpg%')->exists();
return response()->json($content);
}
Функции возвращают true, если изображение используется в поле JSON базы данных. False, если он не используется.