#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: selectselected_products
->’$.»name»‘ fromorders
)
Я надеюсь, что кто-нибудь сможет мне помочь. Спасибо.
Ответ №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. Теперь все в порядке. Полезен ли мой ответ?