Laravel - 从 2 个不同的 table 获取数据以显示为 google 饼图
Laravel - Get data from 2 different table to display as google pie chart
我想显示一个饼图,其中包含基于预订状态的预订数量。但问题是我的预订 table 仅包含预订状态 ID。当我尝试获取数据时,return 错误 'Pie chart should have a first column of type string'。预订状态的名称在另一个不同的 table 上。我是 laravel 框架的新手,所以任何人都可以给我任何关于从 2 个不同的 table 获取数据的指南吗?
这是我的控制器
<?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));
}
}
?>
这是我的blade
<!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>
您需要在查询中进行联接。像这样:
$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();
我为状态 table 使用了名称 'base_booking_status'。您需要更新它以匹配 select 列中其他 table 的实际名称以及连接的第一个和第三个参数。您还需要更新要显示的列的名称,我在这里称之为 'name'。
找到有关查询构建器连接的完整文档
我想显示一个饼图,其中包含基于预订状态的预订数量。但问题是我的预订 table 仅包含预订状态 ID。当我尝试获取数据时,return 错误 'Pie chart should have a first column of type string'。预订状态的名称在另一个不同的 table 上。我是 laravel 框架的新手,所以任何人都可以给我任何关于从 2 个不同的 table 获取数据的指南吗?
这是我的控制器
<?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));
}
}
?>
这是我的blade
<!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>
您需要在查询中进行联接。像这样:
$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();
我为状态 table 使用了名称 'base_booking_status'。您需要更新它以匹配 select 列中其他 table 的实际名称以及连接的第一个和第三个参数。您还需要更新要显示的列的名称,我在这里称之为 'name'。
找到有关查询构建器连接的完整文档