Laravel Tips and Tricks

Giới thiệu

Xin chào mọi người. Chủ đề bài viết này mình xin tổng hợp lại một số tips nho nhỏ khi code Laravel 😄

Tips and Tricks

1. Cache Database Queries

Khi project của bạn sử dụng quá nhiều các câu lệnh truy vấn, theo thời gian ứng dụng của chúng ta sẽ trở nên rất chậm chạp. May mắn là Laravel đã cung cấp cho chúng ta một cơ chế đơn giản cho việc cache lại các câu query bằng việc sử dụng method remember, ví dụ:

$posts = Post::remember(60)->get();

Trong một giờ tới, câu truy vấn trên sẽ được lưu trong bộ nhớ cache và không cần thông qua database nữa.

2. Không nhất thiết phải tạo Controller

Nếu chúng ta muốn URL chỉ show ra một view, chúng ta không cần phải tạo Controller. Ví dụ, thay vì phải:

Route::get('about', '[email protected]');

class TextsController extends Controller
{
    public function about()
    {
            return view('texts.about');
    }
}

Chúng ta chỉ cần:

Route::view('about', 'texts.about');

3. Khôi phục nhiều bản ghi sau khi xóa mềm

Khi sử dụng tính năng xóa mềm của Laravel, chúng ta có thể khôi phục nhiều bản ghi bằng cách sử dụng withTrashedrestore:

Post::withTrashed()->where('author_id', 1)->restore();

4. Disable timestamp

Mặc định, Laravel sẽ tự động cập nhật giá trị hai trường created_atupdated_at cho các model. Nếu chúng ta không muốn sử dụng chúng, chỉ cần thay đổi giá trị của timestamp thành false trong model. Ví dụ:

class Post extends Model
{
    public $timestamps = false;
}

Nếu chúng ta vẫn muốn sử dụng một trong hai trường trên, chúng ta có thể override lại thông qua method getUpdatedAtColumn trong model:

public function getUpdatedAtColumn() {
    return null;
}

hoặc chỉ cần khai báo trong model:

const CREATED_AT = null;
const UPDATED_AT = null;

5. incrementdecrement

Giả dụ chúng ta muốn tăng hay giảm giá trị của một trường, ví dụ:

  • Tăng view_count mỗi lần người dùng xem bài viết.
  • Sản phẩm sau khi được thanh toán sẽ tự động trừ trong kho. Chúng ta sẽ dử dụng incrementsdecrements. Ví dụ:
Post::find($post_id)->increment('view_count');
Product::find($product_id)->decrement('quantity', 50);

6. Kiểm tra view có tồn tại hay không

Chúng ta có thể kiểm tra view trước khi xuất ra cho người dùng thông qua:

if (view()->exists('custom.page')) {
 // Load the view
}

7. Error page

Khi chúng ta muốn tạo một trang thông báo lỗi, lỗi HTTP Code 500 chẳng hạn, chúng ta chỉ cần tạo một view blade với mã code 500 là tên file, ví dụ resources/views/errors/500.blade.php, Laravel sẽ tự động đối ứng lỗi 500 đó với trang chúng ta vừa tạo.

8. dd()

Thay vì phải viết

$users = User::where('name', 'Taylor')->get();
dd($users);

chúng ta có thể thêm trực tiếp method dd() vào cuối cùng của câu query:

$users = User::where('name', 'Taylor')->get()->dd();

9. Cập nhật trường updated_at của model cha

Khi chúng ta update một bản ghi của model con và muốn cập nhật luôn trường updated_at của model cha, ví dụ, khi chúng ta thêm một comment trong bài viết và muốn cập nhật updated_at của model cha Post , chúng ta chỉ cần thêm $touches = ['post']; trong model con Comment.

Cụ thể:

class Comment extends Model
{
 /**
 * All of the relationships to be touched.
 *
 * @var array
 */
 protected $touches = ['post'];
}

10. Auth::once()

Khi chúng ta muốn user được login vào mà không sinh ra session hay cookie nào (rất hữu ích cho các stateless API - những API mà sau khi client gửi dữ liệu lên server, server thực thi xong, trả kết quả thì “quan hệ” giữa client và server bị “cắt đứt” – server không lưu bất cứ dữ liệu gì của client), chúng ta sẽ dùng Auth::once():

if (Auth::once($credentials)) {
    // Do something here
}

Tham khảo

https://laravel-news.com/eloquent-tips-tricks

https://laraveldaily.com/wp-content/uploads/2018/11/Laravel-Tips-2.pdf

https://code.tutsplus.com/tutorials/25-laravel-tips-and-tricks--pre-92818

https://topdev.vn/blog/stateless-la-gi-stateful-la-gi/