Optimize SQL queries on view admin.index

This commit is contained in:
printempw 2018-02-22 19:17:40 +08:00
parent c2855e2e1d
commit 8ceec96224

View File

@ -25,7 +25,7 @@
<span class="info-box-icon bg-aqua"><i class="fa fa-users"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ trans('admin.index.total-users') }}</span>
<span class="info-box-number">{{ App\Models\User::all()->count() }}</span>
<span class="info-box-number">{{ App\Models\User::count() }}</span>
</div><!-- /.info-box-content -->
</a>
</div><!-- /.info-box -->
@ -37,7 +37,7 @@
<span class="info-box-icon bg-green"><i class="fa fa-gamepad"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ trans('admin.index.total-players') }}</span>
<span class="info-box-number">{{ App\Models\Player::all()->count() }}</span>
<span class="info-box-number">{{ App\Models\Player::count() }}</span>
</div><!-- /.info-box-content -->
</a>
</div><!-- /.info-box -->
@ -48,7 +48,7 @@
<span class="info-box-icon bg-aqua" style="background-color: #605ca8 !important;"><i class="fa fa-files-o"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ trans('admin.index.total-textures') }}</span>
<span class="info-box-number">{{ \Database::table('textures')->getRecordNum() }}</span>
<span class="info-box-number">{{ App\Models\Texture::count() }}</span>
</div><!-- /.info-box-content -->
</div><!-- /.info-box -->
@ -56,7 +56,7 @@
<span class="info-box-icon bg-yellow"><i class="fa fa-hdd-o"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ trans('admin.index.disk-usage') }}</span>
<?php $size = \Database::table('textures')->fetchArray("SELECT SUM(`size`) AS total_size FROM `{table}` WHERE 1")['total_size'] ?: 0; ?>
<?php $size = DB::table('textures')->sum('size') ?: 0; ?>
<span class="info-box-number">{{ $size > 1024 ? round($size / 1024, 1)."MB" : $size."KB" }}</span>
</div><!-- /.info-box-content -->
</div><!-- /.info-box -->
@ -83,97 +83,76 @@
</div><!-- /.content-wrapper -->
<script type="text/javascript" src="{{ assets('js/Chart.min.js') }}"></script>
@endsection
@section('script')
<script>
<?php
$today = Carbon\Carbon::today()->timestamp;
$labels = [];
$data = [];
$labels = [];
// Prepare data for the graph
for ($i = 6; $i >= 0; $i--) {
$time = Carbon\Carbon::createFromTimestamp($today - $i * 86400);
$labels[] = $time->format('m-d');
$data['user_register'][] = App\Models\User::like('register_at', $time->toDateString())->count();
$data['user_register'][] = App\Models\User::like('register_at', $time->toDateString())->count();
$data['texture_upload'][] = App\Models\Texture::like('upload_at', $time->toDateString())->count();
}
?>
$(function() {
// Get context with jQuery - using jQuery's .get() method.
<script>
$(function () {
var areaChartCanvas = $("#areaChart").get(0).getContext("2d");
// This will get the first returned node in the jQuery collection.
var areaChart = new Chart(areaChartCanvas);
var areaChartData = {
labels: {!! json_encode($labels) !!},
datasets: [
{
label: trans("admin.textureUploads"),
fillColor: "rgba(210, 214, 222, 1)",
strokeColor: "rgba(210, 214, 222, 1)",
pointColor: "rgba(210, 214, 222, 1)",
pointStrokeColor: "#c1c7d1",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: {!! json_encode($data['texture_upload']) !!}
},
{
label: trans("admin.userRegistration"),
fillColor: "rgba(60,141,188,0.9)",
strokeColor: "rgba(60,141,188,0.8)",
pointColor: "#3b8bba",
pointStrokeColor: "rgba(60,141,188,1)",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(60,141,188,1)",
data: {!! json_encode($data['user_register']) !!}
}
]
labels: {!! json_encode($labels) !!},
datasets: [
{
label: trans("admin.textureUploads"),
fillColor: "rgba(210, 214, 222, 1)",
strokeColor: "rgba(210, 214, 222, 1)",
pointColor: "rgba(210, 214, 222, 1)",
pointStrokeColor: "#c1c7d1",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: {!! json_encode($data['texture_upload']) !!}
},
{
label: trans("admin.userRegistration"),
fillColor: "rgba(60,141,188,0.9)",
strokeColor: "rgba(60,141,188,0.8)",
pointColor: "#3b8bba",
pointStrokeColor: "rgba(60,141,188,1)",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(60,141,188,1)",
data: {!! json_encode($data['user_register']) !!}
}
]
};
var areaChartOptions = {
//Boolean - If we should show the scale at all
showScale: true,
//Boolean - Whether grid lines are shown across the chart
scaleShowGridLines: false,
//String - Colour of the grid lines
scaleGridLineColor: "rgba(0,0,0,.05)",
//Number - Width of the grid lines
scaleGridLineWidth: 1,
//Boolean - Whether to show horizontal lines (except X axis)
scaleShowHorizontalLines: true,
//Boolean - Whether to show vertical lines (except Y axis)
scaleShowVerticalLines: true,
//Boolean - Whether the line is curved between points
bezierCurve: true,
//Number - Tension of the bezier curve between points
bezierCurveTension: 0.3,
//Boolean - Whether to show a dot for each point
pointDot: false,
//Number - Radius of each point dot in pixels
pointDotRadius: 4,
//Number - Pixel width of point dot stroke
pointDotStrokeWidth: 1,
//Number - amount extra to add to the radius to cater for hit detection outside the drawn point
pointHitDetectionRadius: 20,
//Boolean - Whether to show a stroke for datasets
datasetStroke: true,
//Number - Pixel width of dataset stroke
datasetStrokeWidth: 2,
//Boolean - Whether to fill the dataset with a color
datasetFill: true,
//String - A legend template
legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].lineColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>",
//Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
maintainAspectRatio: true,
//Boolean - whether to make the chart responsive to window resizing
responsive: true
showScale: true,
scaleShowGridLines: false,
scaleGridLineColor: "rgba(0,0,0,.05)",
scaleGridLineWidth: 1,
scaleShowHorizontalLines: true,
scaleShowVerticalLines: true,
bezierCurve: true,
bezierCurveTension: 0.3,
pointDot: false,
pointDotRadius: 4,
pointDotStrokeWidth: 1,
pointHitDetectionRadius: 20,
datasetStroke: true,
datasetStrokeWidth: 2,
datasetFill: true,
legendTemplate: "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].lineColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>",
maintainAspectRatio: true,
responsive: true
};
//Create the line chart
areaChart.Line(areaChartData, areaChartOptions);
});
</script>