Как получить значение JSON в Laravel 5,7? - PullRequest
1 голос
/ 06 мая 2019

У меня есть две таблицы в базе данных, package и categories.

package имеет поле category_id, которое содержит данные в этой форме ["1","11"] и показывает categories данные в форме флажка.

Теперь я хочу получить все данные из package, где category_id равно categories id.

Вот мой код:

public function archive_packages(Request $request, $slug){
    $title='Archive Packages';
    $para='';
    $slugs='archive-packages';
    $categoryRow = Category::where('slug',$slug)->first();
    $categoryID = $categoryRow->id;
    $package = Packages::whereRaw('JSON_CONTAINS(category_id, \'["11"]\')')->get();
    dd($package);
    return view('pages.archive-packages',compact('title','para','slugs','package'));
}

Я получаю следующую ошибку:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1305 ФУНКЦИЯ
pre.JSON_CONTAINS не существует (SQL: выберите * из `пакетов`, где
JSON_CONTAINS (category_id, '["11"]'))

Ответы [ 3 ]

0 голосов
/ 06 мая 2019

PHP имеет встроенный метод json_encode () для простого кодирования массивов в строковый формат JSON. Мы можем реализовать это как: это мы можем использовать и в Laravel

$ array = array («ноутбук», «наушники», «мышь»); return json_encode ($ array);

Однако в более новых версиях Laravel также имеется собственный метод json (), который автоматически устанавливает соответствующий Content-Type и кодирует данные JSON:

$ array = array («ноутбук», «наушники», «мышь»); return response () -> json ($ array);

0 голосов
/ 07 мая 2019

Пример JSON:

[{"id": 11, "first_name": "Anthony", "last_name": "Ross", "language": "english", "grade": 1}]

Если у вас есть несколько значений в json, вы можете попробовать цикл как,

foreach($target as $target_result){
  echo $target_result->id;
}

Если у вас есть только одна запись, попробуйте,

$target = Var::where('first_name', '=', $request->input('jsonArr'))->first();
return $jsonArr->id
0 голосов
/ 06 мая 2019

Для этого есть метод laravel, подробнее здесь

Пожалуйста, попробуйте:

Packages::whereJsonContains('category_id', '11')->get();

Если ваша версия mysql не поддерживает json_contains и вы не можете обновить ее, попробуйте выполнить следующий запрос:

Packages::where('category_id', 'like', '%"11"%');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...