Những tính năng có thể bạn chưa biết trong Laravel

LAMP Jan 27, 2021

Chào mọi người.

Có thể các bạn đã có đủ kiến thức và ký năng để nói với mọi người là mình đã làm việc với framework Laravel một cách thuần thục mà không gặp vướng mắc gì.

Nhưng có thể các bạn không biết hết được hết một số tính năng sau đây của Laravel. Dưới đây mình xin nêu ra một số những tính năng rất hay mà không phải ai cũng biết.

👇

1. Cho phép 1 số IP truy cập vào project sau khi dùng artisan down

Các lệnh php artisan down rất hữu ích khi bạn cần phải đưa project Laravel vào trạng thái bảo trì hoặc khi nâng cấp hệ thống. Tuy nhiên, không sử dụng tùy chọn --allow, bạn không kiểm tra được những gì người dùng thông thường đang thấy. Để giải quyết vấn đề này, bạn có thể dùng tùy chọn --allow=IP để cho phép các IP có thể truy cập vào sau khi bạn đưa project vào maintain.

Bạn có thể đưa vào nhiều địa chỉ IP hoặc thậm chí là dải IP:
php artisan down --allow=127.0.0.1 --allow=192.168.0.0/16

Ngoài ra còn một số tùy chọn khác như là:

  • --message = "Upgrading Database" //hiển thị thông báo đó cho người dùng của bạn trong khi trang web ngừng hoạt động
  • --retry //giá trị thử lại, giá trị này sẽ được sử dụng cho giá trị header Retry-After HTTP. Các bạn có thể tham khảo tại đây: Maintenance Mode

2. Sử dụng truy vấn 'WHERE' nhiều trường?

Giả sử bạn muốn thực hiện truy vấn SQL sau:

1-1

Với câu lệnh đơn giản như này, Laravel đã support sẵn function như là whereNameAndEmail hoặc whereNameOrEmail để query dữ liệu 1 cách nhanh chóng.

  • \App\User::whereNameAndEmail('some_name','some@email')->first();
  • \App\User::whereNameOrEmail('some_name','some@email')->first();

Laravel sẽ tự động tìm ra cột mà câu lệnh của bạn đề cập đến

3. Eloquent find()có thể chấp nhận nhiều hàng

Thông thường trong quá trình làm việc chúng ta thường sử dụng hàm find() để tìm thông tin của 1 record, nhưng 1 tác dụng nữa của hàm find đó chính là truy vấn nhiều records theo dạng mảng:

VD: $rows = User::find([1,4,6,11]);

Thông thường hàm find() 1 id sẽ trả về 1 Model thì find() array sẽ trả về 1 collection của các ids đó (tất nhiên là nếu các ids đó tồn tại nếu không sẽ là null).

4. Relationship Eloquent belongsTo có thể trả về một model mặc định nếu trả về null?

Chắc chắn nhiều người dùng phương thức belongsTo mà không biết rằng có thể set 1 giá trị default nếu nó trả về null.

Nếu bạn có một quan hệ (belongsTo, MorphOne hoặc HasOne), nó có thể đôi khi trả về null. Trong trường hợp đó, bạn có thể set một giá trị mặc định với phương thức withDefault().

Nó sẽ tự động tìm ra loại object sẽ trả về, nhưng bạn cũng có thể đặt một số thuộc tính mặc định.

Đây là vài ví dụ:

2-1

5. Lưu cache mãi mãi

Nếu bạn sử dụng tính năng cache, thông thường bạn sẽ gán key lưu giá trị với minutes:
3

Nhưng bạn có biết, bạn có thể lưu giá trị mãi mãi như này không?😄

4

6. Eloquent: Tạo 1 model với data duplicate replicate()

Nếu bạn cần sao chép một đối tượng Eloquent, hãy sử dụng:

5

Phương thức replicate() còn cung cấp chức năng bỏ qua 1 số thuộc tính sao chép bằng $except = [].
Ví dụ: mình sao chép tất cả các trường ngoại trừ trường password:

6

7. Kiểm tra routes hiện tại

Chức năng thông thường sử dụng trong mọi project đó là active menu hiện tại.

Nếu bạn muốn thêm một class='active' thông thường bạn có thể sử dụng if(request()->is('control-panel') || request()->is('control-panel/change-email') || request()->is('control-panel/edit-profile') { ... } kiểm tra URI hiện tại.

Tuy nhiên, bạn chỉ có thể sử dụng ký tự đại diện:
if (request()->is("control-panel*")) { ... }

Bạn có thể sử dụng routeIs() theo cách tương tự, nhưng với name của routes.

8. Sử dụng simplePaginate thay vì paginate

Thông thường hàm paginate() sẽ tính tổng số records có bao nhiêu và tính ra số trang. Khi xử lý big data, đây không phải là một ý tưởng tốt vì sẽ có vấn đề perfomance.

Bên cạnh đó Laravel cũng cung cấp hàm simplePaginate(), nó sẽ chỉ hiển thị một liên kết trước đó và tiếp theo và thực hiện truy vấn nhanh hơn nhiều trên cơ sở dữ liệu của bạn (vì nó không cần đếm tổng số lượng records).

Bạn sử dụng nó theo cách tương tự như phân trang Laravel bình thường, nhưng chỉ cần gọi simplePaginate() thay vì paginate().

7
8

9. Sử dụng artisan make: với tùy chọn -m

Laravel đã cung cấp sẵn tùy chọn -m để tạo file trong folder. Lênh này sẽ giúp kiểm tra sự tồn tại của file trước khi tạo:
php artisan make:model -m Models/YourModel

Sau khi chạy xong thì sẽ sinh ra file app/Models/YourModel.

10. Log mọi thứ với logger() và info()

Sử dụng info("log some info message") và logger("log a debug message").

Nó sẽ nhìn gọn gàng hơn app('log')->debug($message) hoặc \Log::debug($message)

Kết!

Cảm ơn mọi người đã theo dõi bài viết của mình.
Hy vọng những điều này có thể giúp cho các bạn phần nào.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.