У меня есть dropdown select option с onchange event которая отправляет выбранное значение через AJAX на мой контроллер, а затем запрашивает данные на основе выбранного значения из базы данных MySQL и возвращает его в качестве объекта JSON на мой блейд.

Моя проблема — данные JSON из базы данных MySQL в настоящее время в виде одной строки. Как преобразовать его обратно в обычный объект JSON и отобразить каждое значение на основе имени столбца в виде таблицы HTML в новом окне.

Процесс, который должен быть таким

  1. Выберите дату в раскрывающемся списке.
  2. Получить данные из базы данных на основе выбранной даты.
  3. Преобразуйте строку JSON в объект и верните ее блейду.
  4. Вывести данные в виде таблицы HTML в новом окне.

Код контроллера для вставки JSON в базу данных MySQL

 $sqlquery = DB::connection('sqlsrv') -{amp}gt;table('Stocks') -{amp}gt;join('StockTransactions', 'Stocks.Id', '=', 'StockTransactions.StockId') -{amp}gt;select( 'TransactionDate', 'DocumentCode', 'DocType', 'StockName', DB::raw("FORMAT(SUM(UOMQty), 'N') AS TotalUOMQty"), DB::raw("FORMAT(SUM(UOMPrice), 'N') AS TotalUOMPrice"), DB::raw("FORMAT(CurrentBalance, 'N') AS CurrentBalance"), DB::raw("FORMAT(((SUM(UOMPrice) / SUM(UOMQty)) * CurrentBalance), 'N') AS Total") ) -{amp}gt;where([ ['UOMQty', '{amp}gt;', '0'], ['DocumentCode', 'NOT LIKE', 'SA%'], ['DocumentCode', 'NOT LIKE', 'SIN%'] ]) -{amp}gt;WhereBetween('TransactionDate', ['01-01-2000', $dateto]) -{amp}gt;groupBy('StockName', 'TransactionDate', 'CurrentBalance', 'DocumentCode', 'DocType') -{amp}gt;orderBy('TransactionDate', 'ASC') -{amp}gt;get(); $array = json_decode(json_encode($sqlquery), true); $json = json_encode($array); DB::connection('mysql') -{amp}gt;table('records') -{amp}gt;insert(['record' ={amp}gt; $json, 'date_from' ={amp}gt; "2000-01-01", 'date_to' ={amp}gt; "$dateto", 'date_inquiry' ={amp}gt; "$getCurrentDateTimeTo"]); 

Контрольный код для получения JSON из базы данных MySQL

 public function getmysqldata(Request $request) { $request_data = $request-{amp}gt;all(); $dateInquiry = $request_data['dateInquiry']; $result = DB::connection('mysql') -{amp}gt;table('records') -{amp}gt;where([ 'date_inquiry' ={amp}gt; "$dateInquiry" ]) -{amp}gt;get(); return response()-{amp}gt;json($result); } 

Index.blade.php

 Record Available : {amp}lt;select name="recordavailable" id="recordavailable"{amp}gt; @if(!empty($inquiry_date)) {amp}lt;option value=""{amp}gt;Please select records{amp}lt;/option{amp}gt; @foreach ($inquiry_date as $date_inquiry) {amp}lt;option value="{{ $date_inquiry-{amp}gt;date_inquiry}}"{amp}gt;{{ $date_inquiry-{amp}gt;date_inquiry}}{amp}lt;/option{amp}gt; @endforeach @else option value=""{amp}gt;No records{amp}lt;/option{amp}gt; @endif {amp}lt;/select{amp}gt; 

Сценарии

 $(document).on("change", 'select#recordavailable', function(e) { var dateInquiry = $(this).val(); $.ajax ({ type: "GET", data: 'dateInquiry=' dateInquiry, url: 'getmysqldata', dataType: 'JSON', success: function(data) { var randomnumber = Math.floor((Math.random()*100) 1); var winPrint = window.open('',"",'PopUp' randomnumber ', "scrollbars=1,menubar=0,resizable=1"'); winPrint.document.write('{amp}lt;title{amp}gt;Display Record of ' dateInquiry '{amp}lt;/title{amp}gt;{amp}lt;style{amp}gt;table{ border-collapse: collapse;border-spacing: 0;'  'width: 100%;border: 1px solid #ddd;}table, td, th{border: 1px solid black;text-align:center;padding: 5px;}#stockname {text-align: left;}'  'h3 {text-align:center;}#qty, #cost, #balance, #total {text-align: right;}{amp}lt;/style{amp}gt;{amp}lt;h3{amp}gt;' dateInquiry '{amp}lt;/h3{amp}gt;'); winPrint.document.write(JSON.stringify(data)); } }); }); 

Приставка

приставка

Выход

Выход

Выход я хочу чтобы это было

expectedoutput

Вам необходимо преобразовать столбец записи в таблице записей как массив, который приведёт его к соответствующему json в выводе.

https://laravel.com/docs/5.8/eloquent-mutators#array-and-json-casting