使用yajra/laravel-datatables
默认的方式都是使用eloquent 但是对于复杂数据的查询会有问题 使用DB::select可以直接查询sql
Route:
Route::get('datatables/datatable','DatatablesController@getIndex'); Route::get('datatables/anyData','DatatablesController@anyData')->name('datatables.data');
Controller:
<?php namespace App\Http\Controllers; use App\Http\Requests; use App\User; use Yajra\Datatables\Datatables; use DB; class DatatablesController extends Controller { /** * Displays datatables front end view * * @return \Illuminate\View\View */ public function getIndex() { return view('datatables.index'); } /** * Process datatables ajax request. * * @return \Illuminate\Http\JsonResponse */ public function anyData() { // $users = User::select(['id', 'name', 'email', 'password', 'created_at', 'updated_at']); $sql = "select id, name, email, created_at, updated_at,id from users"; $users = DB::select($sql); return Datatables::of($users) ->addColumn('action', function ($user) { return '<a href="#edit-' . $user->id . '" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i> Edit</a>'; }) ->make(true); } }
View:
@extends('layouts.master') @section('content') {{ Breadcrumbs::render('home') }} <table class="table table-bordered" id="users-table"> <thead> <tr> <th>Id</th> <th>Name</th> <th>Email</th> <th>Created At</th> <th>Updated At</th> <th>Action</th> </tr> </thead> </table> @stop @push('scripts') <script> $(function() { $('#users-table').DataTable({ processing: true, serverSide: true, ajax: '{!! route('datatables.data') !!}', columns: [ { data: 'id', name: 'id' }, { data: 'name', name: 'name' }, { data: 'email', name: 'email' }, { data: 'created_at', name: 'created_at' }, { data: 'updated_at', name: 'updated_at' }, { data: 'action', name: 'action', orderable: false, searchable: false } ] }); }); </script> @endpush