Có lẽ mọi người giờ đã quá quen thuộc với framework Laravel hiện là framework phổ biến và được sử dụng rộng rãi nhất hiện nay. Hôm nay mình muốn chia sẻ chút kinh nghiệm mà minh học
được trong thực tế. Việc sử dụng Traits để quản lý các Models trong Laravel.
Đầu tiên về khái niệm Traits nếu như ai thắc mắc Traits là gì thì có thể đọc ở đây.
Mình nhắc lại đây chỉ là kinh nghiệm thực tế của mình nếu không đúng hoặc có sai sót gì trong bài viết mong các bạn bỏ qua.
Mình không nói dông dài nữa và vào luôn vấn đề. Ví dụ chúng ta có 2 bảng authors và books quan hệ là 1 authors có nhiều books và 1 books thuộc 1 authors.
Mình thấy mọi người vẫn làm như sau :
Tạo file Model Author trong App\Models
class Author extends Model
{
protected $table = "authors ";
protected $primaryKey = "id";
//Relationship
public function books(){
return $this->hasMany(App\Models\Temperatures\Temperature::class, 'id');
}
//Query
public function getDemo01(){
// thực hiện hành động truy vấn 1
}
public function getDemo2(){
// thực hiện hành động truy vấn 2
}
}
Ok ! không vấn đề gì cả nếu chúng ta chỉ có ít Relationship và ít các câu Query. Tuy nhiên trong thực tế chúng ta sẽ gặp nhiều trường hợp mà bảng sẽ có tới 5 hay thậm chí 10 Relationship, vô vàn những câu Query.
Khi đó chắc chắn file Model của các bạn sẽ dài vài trăm thậm chí cả ngàn dòng. Đó sẽ là cực hình cho việc phát triền thêm và bảo trì code sau này.
Thay vì như thế chúng ta có thể tận dung Traits để làm như sau :
Tạo folder App\Models\Authors . Trong đó sẽ bao gồm 3 file Author.php, AuthorRelationship.php, AuthorQuery.php. Nhìn tên chắc mọi người cũng đã hình dung ra nội dung của file chứa cái gì.
Trong file Author.php ta sẽ viết
class Author extends Model { use AuthorRelationship, AuthorQuery; protected $table = "authors "; protected $primaryKey = "id"; protected $filable = []; ..... }
- Trong file AuthorRelationship.php ta sẽ viết
trait AuthorRelationship {
public function books(){
return $this->hasMany(App\Models\Temperatures\Temperature::class, 'id');
}
.....
}
2. Trong file AuthorQuery ta sẽ viết
trait AuthorRelationship { //Query public function getDemo01(){ // thực hiện hành động truy vấn 1 } public function getDemo2(){ // thực hiện hành động truy vấn 2 } }
Việc chia ra thành các cấu trúc nhỏ hơn sẽ giúp ta tiện hơn trong việc theo dõi quản lý, thêm mới hoặc bảo trì các code về sau.
Ngoài ra mình cũng hay sử dụng Traits để viết quản lý thêm các Accessor và Mutator.
Đây là toàn bộ những gì mình muốn nói trong bài này. Nếu ai có thắc mắc và chưa thấy thỏa đáng thì có thể để comment cho mình.
COMMENTS