Laravel - получение данных из 2-х различных таблиц для отображения в виде круговой диаграммы google


Laravel - получение данных из 2-х различных таблиц для отображения в виде круговой диаграммы google

13.07.2020 12:54:39 Просмотров 7 Источник

Я хочу отобразить круговую диаграмму, состоящую из того, сколько бронирований основано на ее статусе бронирования. Но проблема в том, что моя таблица бронирования состоит только из идентификатора статуса бронирования. Когда я пытаюсь получить данные, он возвращает ошибку, где "круговая диаграмма должна иметь первый столбец типа string". Имя статуса бронирования находится на другой таблице. Я довольно новичок в laravel framework, так что может ли кто-нибудь дать мне какое-либо руководство по получению данных из 2 разных таблиц?

Вот мой контроллер

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;

class LaravelGoogleGraph extends Controller
{


    function index()
    {
     $data = DB::table('booking')
       ->select(
        DB::raw('base_booking_status_id as status'),
        DB::raw('count(*) as booking_id'))
       ->groupBy('status')
       ->get();
     $array[] = ['Status', 'Total'];
     foreach($data as $key => $value)
     {
      $array[++$key] = [$value->status, $value->booking_id];
     }
     return view('google_pie_chart')->with('status', json_encode($array));
    }
}
?>

Вот мой клинок

<!DOCTYPE html>
<html>
 <head>
  <title>Make Google Pie Chart in Laravel</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <style type="text/css">
   .box{
    width:800px;
    margin:0 auto;
   }
  </style>
  <script type="text/javascript">
   var analytics = <?php echo $status; ?>

   google.charts.load('current', {'packages':['corechart']});

   google.charts.setOnLoadCallback(drawChart);

   function drawChart()
   {
    var data = google.visualization.arrayToDataTable(analytics);
    var options = {
     title : 'Booking Status'
    };
    var chart = new google.visualization.PieChart(document.getElementById('pie_chart'));
    chart.draw(data, options);
   }
  </script>
 </head>
 <body>
  <br />
  <div class="container">
   <h3 align="center">Booking Report</h3><br />
   
   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Booking Status</h3>
    </div>
    <div class="panel-body" align="center">
     <div id="pie_chart" style="width:750px; height:450px;">

     </div>
    </div>
   </div>
   
  </div>
 </body>
</html>
У вопроса есть решение - Посмотреть?

Ответы - Laravel - получение данных из 2-х различных таблиц для отображения в виде круговой диаграммы google / Laravel - Get data from 2 different table to display as google pie chart

Является ответом!
James Clark Developer

13.07.2020 01:23:29

Вам нужно будет сделать соединение в вашем запросе. Что-то вроде этого:

$data = DB::table('booking')
   ->select([
      'booking.base_booking_status_id as status_id',
      'base_booking_status.name as status_name',
      'booking.id as booking_id',
    ])
    ->leftJoin('base_booking_status', 'booking.base_booking_status_id', '=', 'base_booking_status.id')
    ->groupBy('booking.status')
    ->get();

Я использовал имя "base_booking_status" для таблицы статусов. Вам нужно будет обновить его, чтобы он соответствовал фактическому имени другой таблицы в выбранных столбцах, а также в первом и третьем параметрах соединения. Вам также нужно будет обновить имя столбца, который вы хотите отобразить, который я назвал здесь "имя".

Полную документацию по соединениям построителя запросов можно найти по адресу https://laravel.com/docs/master/queries#joins

Помочь в развитии проекта:
Закрыть X