Laravel Tinker là gì? Áp dụng thực tế trong quá trình phát triển ở Ecomobi

Trong thời gian làm ở Ecomobi mình cũng có cơ duyên được làm việc ở nhiều hơn 1 team. và cũng có cơ hội làm việc cùng gần như toàn bộ anh em dev backend ở đây. Mình nhận thấy trong laravel có tích hợp sẵn 1 tool gọi là laravel Tinker mà hiếm thấy anh em sử dụng (1 số anh em còn chưa biết đến sự tồn tại của nó). Vậy laravel tinker là gì? ứng dụng ra làm sao?

Laravel Tinker là gì?

Trên trang chủ của laravel thì nói rất ngắn gọn cục súc “Laravel Tinker is a powerful REPL for the Laravel framework, powered by the PsySH package.”

Còn theo như những gì mình cóp nhặt được trên google thì Laravel Tinker là một công cụ shell tương tác được tích hợp sẵn trong Laravel, cho phép chúng ta tương tác trực tiếp với project của mình thông qua dòng lệnh. Tinker dựa trên REPL (Read-Eval-Print Loop), nó cho phép thực thi mã PHP trong thời gian thực, thử nghiệm các đoạn mã nhỏ, tương tác với cơ sở dữ liệu, kiểm tra các phương thức của model và nhiều tác vụ khác mà không cần viết các script hoặc chạy toàn bộ ứng dụng.

Đấy là khái niệm lý thuyết của tinker. Còn thực tế mọi người chỉ cần hiểu đơn giản là nó có thể tương tác trực tiếp tới các class, các function và còn có thể query database qua model.

Áp dụng như thế nào?

Một ví dụ rất thực tế và gần đây nhất khi mình mới sang team toptop như thế này. Mình được giao 1 task update crawl order từ tiktok về database của mình. Sau khi đọc code thì nhận thấy logic của phần này là đi từ command => call job 1 => call job 2 => call job 3 => call job 4. Mỗi 1 job là 1 vòng for. Trớ trêu thay phần cần update lại ở job 4 và mỗi 1 job là 1 queue name khác nhau. Vậy nếu làm bình thường thì mỗi lần test là phải start lại 4 job và call từ đầu. Ban đầu mình cũng chạy thử vì nghĩ chắc cũng nhanh thôi, nhưng k đơn giản như vậy. mỗi job chạy khá lâu và k phải cái nào cũng có data để gọi sang job tiếp theo. Sau 1 thời gian thấy lượng queue push vào cả nghìn queue mà vẫn k đến được cái job của mình cần test @@. Cảm giác chờ đợi thật là vô vọng k biết khi nào mới chạy đến và chạy đến thì có bị lỗi gì k.

Sau 1 lúc thấy tình hình không ổn thì mình đã dừng lại và nên để cho tinker phát huy ưu điểm của nó 1 cách tối đa.

Đơn giản là chỉ việc gọi tinker lên bằng lệnh:

php artisan tinker

Sau khi gõ xong thì cửa sổ shell của tinker sẽ hiện lên

Việc tiếp theo chỉ là start job của mình và từ tinker gọi đích danh job đó và truyền các tham số mà job mình cần vào là xong

Bùm! vậy là xong. 1 command đã chạy được đến đích danh job mình muốn và nhanh chóng có thể test và update được các phần trong task của mình mà k phải phụ thuộc vào các phần trước đó.

Ví dụ nữa về việc dùng tinker để query database

Trên đây là ví dụ thực tế nhất và gần nhất trên dự án tại Ecomobi. Ngoài run cho job ra thì có thể run được cho model, controller, service…. miễn là n nằm trên source. Mọi người có thể tận dụng tính năng có sẵn này để có thể phát triển tính năng nhanh hơn và linh hoạt hơn trong quá trình dev của mình.

Related Posts