У меня в базе данных есть столбец, в котором хранится json, и я хотел бы восстановить значение определенного объекта моего json, чтобы проверить его.
Итак, мой столбец «JSON» содержит это
{
"type":"index",
"data ":{"index":2}
}
И если я получу 2, мне нужно получить этот столбец, содержащий индекс 2, чтобы удалить его. Я пробовал это:
$column = Table::where('JSON["data"]["index"]','=', '2' )
->first();
Table::dropColumn($column);
Но это не работает, потому что я не могу получить индекс
Вы можете попробовать что-то вроде этого: Table::where('json_columnname','like', '%"data ":{"index":2}%' ) ->first();
Или установить пакет, который добавляет поддержку запросов json, например, ответ здесь stackoverflow.com/questions/42425667/…
@RobBiermann попробовал это, но результат нулевой!
Просто используйте SQL
->where('JSON', 'like', '%"index": "2"%');
Since you gave JSON value as a string, it was unable to get the index value.
Can you please try like below,
$column = Table::whereRaw(JSON["data"]["index"], '=', '2' )
->first();
Table::dropColumn($column);
Я пробовал это, но это говорит мне о синтаксической ошибке, мне не нравится помещать JSON так
Если вы используете последнюю версию laravel, то
$column = Table::where('JSON->data->index','2')->first();
Должно сработать.
Вы можете обратиться к официальной документации laravel для json, где пункт здесь.
SQLSTATE [42703]: неопределенный столбец: 7 ОШИБКА: столбец «данные» не существует
помогает ли приведение столбца к массиву? laravel.com/docs/5.8/eloquent-mutators#приведение атрибутов (посмотрите немного дальше для JSON -> приведение массива)