项目作者: bitstudio-id

项目描述 :
A simple way to implement datatable with eloquent & query builder
高级语言: PHP
项目地址: git://github.com/bitstudio-id/bitdatatable.git
创建时间: 2019-07-12T08:05:58Z
项目社区:https://github.com/bitstudio-id/bitdatatable

开源协议:

下载


BITDataTable : jQuery DataTables for Laravel

This package is created to handle server-side works of DataTables jQuery Plugin via AJAX option by using Eloquent ORM / Query Builder.

Quick Installation

  1. composer require bitstudio-id/bitdatatable

Requirements

Javascript and CSS

  1. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css"/>
  2. <link rel="stylesheet" href="//cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css"/>
  3. <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  4. <script src="//cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
  5. <script src="//cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js"></script>

Blade view

  1. <table id="table" class="table table-bordered table-striped">
  2. <thead>
  3. <tr>
  4. <th>#ID</th>
  5. <th>Name</th>
  6. <th>Role</th>
  7. <th>Email</th>
  8. <th>...</th>
  9. </tr>
  10. </thead>
  11. <tbody></tbody>
  12. </table>

Javascript

  1. <script>
  2. $(document).ready(function () {
  3. //hide error/warning on datatable
  4. $.fn.dataTable.ext.errMode = 'none';
  5. var table = $('#table').DataTable({
  6. //enable filter
  7. bFilter: true,
  8. processing: true,
  9. serverSide: true,
  10. ajax: {
  11. url: "/dummy/dtb-v2/get",
  12. type: 'get',
  13. },
  14. columns: [
  15. {data: "id", name: "id", searchable: false, orderable: false},
  16. {data: "employee.code"},
  17. {data: "name", name: "user_name"},
  18. {data: "employee.role.name"},
  19. {data: "email"},
  20. {data: "action", searchable: false, orderable: false}, // use searchable: false, orderable: false for custom column
  21. ],
  22. });
  23. });
  24. </script>

How to use with eloquent

  1. use BITStudio\BITDataTable\BITDataTable;
  2. ...
  3. ...
  4. public function dtbGetV2(Request $request)
  5. {
  6. $dtb = new BITDataTable();
  7. // Set request
  8. $dtb->setRequest($request);
  9. $user = User::query()->with('employee', 'employee.role');
  10. $dtb->from($user);
  11. $state = "admin";
  12. $dtb->addCol(function ($user){
  13. $user->action = "<a target='_blank' href='//lorem.com/{$user->id}' class='btn btn-danger'>action-{$item->id}</a>";
  14. return $user;
  15. });
  16. return $dtb->generate();
  17. }

How to use logic on addCol

  1. $state = "admin";
  2. $dtb->addCol(function ($user) use ($state){
  3. //use logic on addCol
  4. //set as empty default
  5. $user->admin_col = "";
  6. if($state == $user->role->name) {
  7. $user->admin_col .= "admin-col";
  8. }
  9. return $user;
  10. });

How to use with Query Builder

  1. use BITStudio\BITDataTable\BITDataTable;
  2. ...
  3. ...
  4. public function dtbGetV2(Request $request)
  5. $dtb = new BITDataTable();
  6. $dtb->setRequest($request);
  7. $q = DB::table("orders as o");
  8. $q->select("o.*", "o.no_cs as customer_number", "e.employee_name as emp_name");
  9. $q->leftJoin("employee as e", "e.id", "=", "o.employee_id");
  10. $dtb->from($q);
  11. //add custom column
  12. $dtb->addCol(function ($user){
  13. $user->action = "<a target='_blank' href='//google.com/{$item->id}' class='btn btn-danger'>action-{$item->id}</a>";
  14. return $user;
  15. });
  16. return $dtb->generate();
  17. }

How to show index number for numbering on view

  1. $dtb->setRowIndex(true);

this will append property DT_RowIndex on json response

  1. columns: [
  2. {data: "DT_RowIndex", name: "id" searchable: false, orderable: false},
  3. ...
  4. ]

dont forget to set searchable = false

add value class attribute

  1. $dtb->addClass("text-danger"); //insert before genereate

add value id attribute

  1. //create custom from collection property
  2. $dtb->setRowId("id");
  3. //create custom from addCol or setRowId for custom id attribute
  4. $dtb->setRowId(function($item) {
  5. $item->DT_RowId = "id-".$item->id;
  6. return $item;
  7. });

License

The MIT License (MIT). Please see License File for more information.