post-image

Laravel Tinker

Tổng quan

Trong bài viết này, tôi xin giới thiệu với tất cả bạn đọc một tính năng ít đươc biết đến của Laravel, tính năng này giúp bạn nhanh chóng đọc được dữ liệu ngay bên trong project của mình. Đó là Tinker của Laravel, để sử dụng được Tinker chạy lệnh:

php artisan tinker

Tinker của Laravel artisan là một repl (read-eval-print loop)

Ví dụ, tôi có một vài câu lệnh xử lý với Database như sau:

// see the count of all users App\User::count(); // find a specific user and see their attributes App\User::where('username', 'samuel')->first(); // find the relationships of a user $user = App\User::with('posts')->first(); $user->posts;
Code language: PHP (php)

Muốn xem được kết quả của những câu truy vấn trên, nhanh nhất chúng ta cũng cần tới vài thao tác xử lý. Tạo Controller, routes, Model, …v.v. Tuy nhiên với php artisan tinker chúng ta có thể xem được kết quả đầu ra vô cùng nhanh chóng. Tinker cho phép chúng ta tương tác trực tiếp với ứng dụng của mình thông qua các lệnh như stop() hay dd() thậm chí là cả print_r().

Hướng dẫn sử dụng

Cài đặt project Laravel: Để xử dụng được Tinker trước tiên hay tạo một project của chính bạn đã:

composer create-project laravel/laravel TinkerTest --prefer-dist
  • Database Setup: Running Migrations:

Sau khi tạo thành công một project mới, bạn cần tạo mới database và cài đặt migrations. Trong bài viết này, tôi sẽ dùng migrations mặc định của Laravel. Hãy đảm bảo rằng bạn đã cài đặt trong file .env để có thể chạy được migrations. Laravel đã tạo sẵn cho chúng ta migrations của 2 bảng là users và password_resets. Tiến hành chạy migrations, từ root chạy lệnh:

php artisan migrate
  • Seeding our Database:

Laravel cung cấp cho chúng ta chức năng model factory cái mà chúng ta sử dụng để tiến hành seed database. Bây giờ, hãy bắt đầu với Tinker.

Từ thư mục root của project, chạy lệnh:

php artisan tinker

Lệnh này sẽ mở lên một relp, với relp vừa được hiển thị, chúng ta có thể chạy model factory và tiến hành seed database tại đó với lệnh:

factory(App\User::class, 10)->create();
Code language: JavaScript (javascript)

Sau khi chạy xong lệnh trên trong relp, để chắc chắn là câu lệnh đã được thực thi, hãy vào datatabase và kiểm tra lại. Nếu có user mới được sinh ra tức là câu lệnh đã chạy đúng. Một collection của 10 user sẽ hiển thị bên trên màn hình nếu bạn gõ lệnh.

App\User::all();
Code language: CSS (css)

Nếu muốn đếm tổng số lượng bản ghi có trong bản users, chạy lệnh:

App\User::count();
Code language: CSS (css)

Sau khi chạy hai câu lệnh trên, relp sẽ hiển thị như sau:

e64af050 777b 478e beb6 d6839745c1dd
  • Creating a New User:

Với relp, chúng ta cũng có thể tạo mới được một bản ghi trong bảng users, lưu ý rằng khi gõ code trong relp cũng tương tự như bạn đang gõ code trong project của mình vậy. Để tạo mới user thực hiện như sau:

$user = new App\User; $user->name = "Canh dep trai"; $user->email = "canhdeptrai@gmail.com"; $user->save();
Code language: PHP (php)

Hãy thử gõ $user trong relp, thông tin user vừa được khai báo sẽ hiển thị trên màn hình.

  • Deleting a User

Để xóa một user trong bảng users, thao tác;

$user = App\User::find(1); $user->delete();
Code language: PHP (php)
  • Reading a Function/Class Documentation

Với Tinker, bạn có thể xem document của một class hoặc một function. Tuy nhiên, nó phụ thuộc vào việc hàm hay là function của bạn có sử dụng DocBlocks hay không? Để làm được điều này:

doc <functionName> # replace <functionName> with function name or class FQN
Code language: HTML, XML (xml)

Ví dụ, tôi muốn xem doc của function dd().

nh6

Nếu muốn chi tiết hơn, xem source code của một hàm hay một class.

show <functionName>
Code language: HTML, XML (xml)

Tôi muốn xem hàm dd() viết cái gì ở trong

f

Kết luận

Trên đây chỉ là một vài chức năng của Tinker khi làm việc với database, còn nhiều tính năng vô cùng hữu ích khác nữa. Hãy cùng tìm hiểu và chia sẻ nhé.

Các bạn có thể tham khảo các bài viết hay về Laravel tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Tham khảo: Viblo

Leave a Reply

Your email address will not be published. Required fields are marked *