Laravel MySQL выбирает из вложенного JSON-столбца

#mysql #json #laravel

#mysql #json #laravel

Вопрос:

У меня есть JSON-столбец в базе данных MySQL.

Контроллер

Это мой пример кода, который получает selected_products из таблицы и возвращает его в формате JSON, который я намерен использовать для данных диаграммы. Что я пытаюсь сделать, так это получить name из product .

 $products = Order::select('selected_products')->get();

return response()->json(['test_data' => $products], 200);
  

Ответ JSON можно просмотреть здесь

Если я сделаю это следующим образом:

 $products = Order::select('selected_products->name')->get();
  

Возвращает ошибку:

SQLSTATE [42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с ‘>’$.»name»‘ from orders ‘ в строке 1 (SQL: select selected_products ->’$.»name»‘ from orders )

Я надеюсь, что кто-нибудь сможет мне помочь. Спасибо.

Ответ №1:

Почему бы вам не выполнить цикл по $products массиву?

 $porductsNames = array();

$products = Order::select('selected_products')->get();

foreach ($products as $product){
   foreach($product('selected_products') as $p){
        $productsNames[] = $p['name'];
   }
}

// Then you can use it
dd($productsNames);
  

Комментарии:

1. Ваш ответ выглядит многообещающим, однако я попробовал его, и он возвращается null .

2. @Emjey23 можете ли вы поделиться своими данными Teamviewer, я могу проверить это для вас!

3. Это здорово, загружаю Teamviewer.

4. Не размещайте детали teamviewer на общедоступном сайте! Ты с ума сошел?

5. Спасибо за большую помощь. Действительно ценится.

Ответ №2:

Замените $products следующей строкой и проверьте, что это работает.

 $products = Order::all('selected_products');
  

Если это невозможно, используйте инструкцию sql, подобную приведенной ниже

 $products=DB::select("SELECT selected_products from orders")
  

Комментарии:

1. Привет, спасибо за ваш ответ, я полагаю, что я не полностью объяснил, что я пытаюсь получить. Я получаю selected_products , но внутри него не может быть такого, как selected_products->name . Это то, что я пытаюсь получить. Спасибо.

2. Теперь все в порядке. Полезен ли мой ответ?