+27

Những mẹo và thủ thuật bạn có thể dùng để quẩy với Laravel Eloquent

Giới thiệu

Xin chào các bạn, nếu như ai đã từng làm việc với Laravel Framework rồi thì chắc bạn cũng ko lạ lẫm gì với Eloquent ORM. Đây là một loại ORM mặc định của Laravel, nó nhìn chung có vẻ không khó lắm. Tuy bên ngoài vẻ đẹp hoang sơ vậy thôi nhưng bên trong nó ẩn chứa nhiều cảnh vật nên thơ hữu tình đấy các bạn ạ. Vì vậy, hôm nay mình xin giới thiệu những tips và tricks bạn có thể làm với Eloquent để giúp cho bạn làm việc dễ dàng hơn với nó. Cùng bắt đầu nhé!

Những mẹo bạn có thể dùng để quẩy với Eloquent Model

Tăng và giảm

Có bao giờ bạn phải tăng và giảm 1 số trong database chưa. Kiểu như là tăng view bài viết khi có người đọc chẳng hạn.

Thay vì làm như thế này:

$article = Article::find($article_id);
$article->views++;
$article->save();

Bạn có thể làm như sau:

$article = Article::find($article_id);
$article->increment('views');

Hoặc là bạn cũng có thể tăng/giảm nhiều đơn vị như sau:

Article::find($article_id)->increment('views', 10); // +10
Article::find($article_id)->decrement('views'); // -1

WhereX ( Magic =)) )

Ví dụ bạn muốn tìm 1 User với email = 'tiendeptrai@framgia.com' chẳng hạn. Bạn sẽ làm thế nào, chắc chắn là thế này rồi:

$user = User::where('email', 'tiendeptrai@framgia.com')->first();

Tuy nhiên bằng 1 phép thuật nào đó:

$user = User::whereEmail('fsddf@gmail.com')->first();

Điều đó có nghĩa là bạn có thể thay Email bằng bất cứ trường nào bạn muốn tìm, và nó tất nhiên là được:

User::whereName('Tien Dep Trai')->first();
User::whereTime('20p')->first();

Vài hàm chơi nước đôi:

Bạn cần dùng hàm find() để tìm 1 bài viết và nếu nó không tồn tại thì trả về 404:

Thay vì:

$article = Article::find($id);
if (!$article) { 
    abort (404); 
}

Bạn có thể:

$article = Article::findOrFail($id);

Tương tự có một số hàm như:

firstOrCreate

$article = Article::firstOrCreate(['name' => 'Do not stop!']); // Lấy bài viết đầu tiên với tên là 'Do not stop!' hoặc tạo mới bài viết.

updateOrCreate

// Update sách có tên là 'Do not stop!' với price = 99.
// Nếu không tồn tại sách phù hợp thì tạo mới
$article = Article::updateOrCreate(
    ['name' => 'Do not stop!'],
    ['price' => 99]
);

Một vài thuộc tính thêm của Model

Chắc chắn là bạn đã từng viết thêm thuộc tính cho model như sau để định nghĩa tên bảng/fillable:

protected $table = 'users';
protected $filla