- vừa được xem lúc

Sử dụng Data-tables trong Laravel

0 0 277

Người đăng: tuan anh

Theo Viblo Asia

I. Giới thiệu

  • Datatables cung cấp cho chúng ta tìm kiếm nhanh, phân trang, sắp xếp, v.v.
  • Nó tìm các record thông qua eloquent model bằng cách sử dụng ajax query.
  • Để có thể sử dụng được datatables các bạn cần có những kiến thức cơ bản liên quan tới: M-V-C.

II. Cài đặt và sử dụng

  • Trong phần này mình đơn giản sẻ chia thành 3 phần cơ bản chính cần quan tâm:
    • Server Side Package: laravel-datatables để xử lý server-side những dữ liệu mà datatables cần khi gọi jQuery Plugin via AJAX
    • Client Side Library: sử dụng datatables để hiển thị dữ liệu từ máy chủ đến view của bạn.
    • Laravel Models: Tạo model postcomment để sẵn sàng cho việc chạy demo.

1. Install laravel-datatables

  • Chúng ta sử dụng composer để cài đặt packet này. Sử dụng câu lệnh bên dưới.
$ composer require yajra/laravel-datatables-oracle:"~8.0"
  • Để có thể sử dụng được chúng ta phải khi báo provider cho chúng trong file: config/app.php
'providers' => [ ..., Yajra\DataTables\DataTablesServiceProvider::class,
]
'aliases' => [ ..., 'DataTables' => Yajra\DataTables\Facades\DataTables::class,
]

2. Initialize the views with datatables assets

  • Chúng ta sẽ thêm cdn của datatables vào view để đảm bảo rằng không có js hoặc css nào bị chết.
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.css"/>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/datatables.min.js"></script>

3. Laravel Models

  • Tạo model PostComment cho việc demo dữ liệu. Phần này mình đã để cập ở đoạn đầu:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model
{ protected $fillable = ['title', 'content', 'user_id']; public function comments() { return $this->hasMany(Comment::class); } public function user() { return $this->belongsTo(User::class); }
}

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model
{ protected $fillable = ['content', 'user_id']; public function post() { return $this->belongsTo(Post::class); } public function user() { return $this->belongsTo(User::class); }
}

4. Xử lý dữ liệu từ server về view thông quá Ajax

  • Đầu tiên chúng ta sẽ tạo 1 route trong routes/web.php để phục vụ cho quá trình truyền nhận dữ liệu.
  • Việc này xử lý khá đơn giản các bạn có thể tham khảo bên dưới:
Route::get('ajax/posts', 'Ajax\_@.com')->name('ajax.posts.index');
  • Tiếp theo chúng ta sẽ qua phần quan trọng hơn đó là xử lý dữ liệu cần phải gửi về cho view.
  • Mình sẽ tiến hành trả về cho view dữ liệu liên quan tới Post, CommentUser.
  • Tiến hành sử dụng thuộc tính addColumn của datatables để thêm 2 trường mới: user_namecomments_num phục vụ cho tối ưu dữ liệu trả về.
<?php namespace App\Http\Controllers\Ajax; use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DataTables;
use App\Post; class PostController extends Controller
{ public function index() { return Datatables::of(Post::query()->with('comments', 'user')) ->addColumn('user_name', function($row){ return $row->user->name; }) ->addColumn('comments_num', function($row){ return $row->comments->count(); }) ->make(true); }
}
  • Như vậy cơ bản chúng ta đã xử lý xong phần server-side truyền dữ liệu xuống view mà mình đã đề cập ở phần 1.

5. Hiển thị dữ liệu từ server lên view

  • Cơ bản đầu tiên thì chúng ta vẫn cần phần khung xương html để hiển thị cái table dữ liệu.
<table id="demo_table" class="display" style="width:100%"> <thead> <tr> <th>#</th> <th>Title</th> <th>User Id</th> <th>Comments Number</th> </tr> </thead>
</table>
  • Tiếp theo là phần lấy dữ liệu từ server, chúng ta sẽ dùng ajax để tiến hành lấy dữ liệu:
$(document).ready( function () { $('#demo_table').DataTable({ "processing": true, "serverSide": true, "ajax": '{{ route('ajax.posts.index') }}', "columns": [ { "data": "id" }, { "data": "title" }, { "data": "user_name" }, { "data": "comments_num" }, ] });
} );

  • À còn 1 phần cần quan trọng cần lưu ý đó là:
    • Khi các bạn khai báo các thẻ <th> trong HTML thì trong phần JS call ajax để lấy dữ liệu các bạn phải chú ý đến thứ tự của chúng để đảm bảo cho việc hiển thị dữ liệu của bạn được chính xác.
    • Tiếp theo là cdn mình đã đề cập ban đầu. Nếu table của bạn không hiển thị hoặc không có hiệu ứng hãy kiểm tra lại phần thêm cdn này đã có thêm chưa nhé.

  • Cuối cùng nếu bạn không gặp phải vấn đề gì thì sẽ có kết quả như thế này với điều kiện là trong database của bạn phải có dữ liệu nhé ?.

6. Chia sẻ

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 335

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 421

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 141

- vừa được xem lúc

Một số tips khi dùng laravel (Part 1)

1. Show database query in raw SQL format. DB::enableQueryLog(); // Bật tính năng query logging. DB::table('users')->get(); // Chạy truy vấn bạn muốn ghi log.

0 0 69

- vừa được xem lúc

Inertiajs - Xây dựng Single Page App không cần API

Tiêu đề là mình lấy từ trang chủ của https://inertiajs.com/ chứ không phải mình tự nghĩ ra đâu nhé :v. Lâu lâu rồi chưa động tới Laravel (dự án cuối cùng mình code là ở ver 5.8), thế nên một ngày đẹp trời lượn vào đọc docs ver 8.

0 0 227