Laravel Tip : Custom Many To Many

Chúng ta có thể custom cách thức truy vấn mối quan hệ (Many-to-Many) trong Laravel. Thông thường chúng ta hay sử dụng cách thức mặt định như sau:

// Product Model

 public function user(): BelongsToMany
    {
        return $this->belongsToMany(User::class,'product_user');
    }

Và sử dụng cách thể thêm một dữ liệu vào

// thêm,edit một product của user 
$product->user()->attach($user,['type'=>'author'])
$product->user()->attach($user,['type'=>'editor'])

// lấy những sản phẩm của user thuộc type='author', or ytpe='editor'
$product->users()->wherePivot('type',author')->get()
$product->users()->wherePivot('type','editor')->get()

Bây giờ chúng ta sẽ custom lại một xíu như sau:

// Product Model   
  public function authors(): BelongsToMany
    {
        return $this->belongsToMany(User::class,'product_user')->withPivotValue('type','author');
    }
    
    public function editors(): BelongsToMany
    {
        return $this->belongsToMany(User::class,'product_user')->withPivotValue('type','editor');
    }

Bây giờ bạn sẽ thấy điều tuyệt với hơn với cú pháp thêm như sau

// thêm sản phẩm của tác giả nào đó
$product->authors()->attach($user)

//lấy tác giả của sản phẩm đó ra
$product->authors;

// tác giả đã chỉnh sửa sản phẩm 
$product->editors()->attach($user);

// lấy tác giả chỉnh sửa sản phẩm đó
$product->editors;

Okay, nếu chúng ta thêm nhiều nhiều tác giả cho một sản phẩm thì sau

// Thêm nhiều tác giả cùng lúc
$authorIds = [2, 3, 4]; // Giả sử đây là ID của các tác giả
$product->authors()->attach($authorIds);

Hoặc bạn muốn lấy thông tin "author, editor" của sản phấm đó

$product = Product::find(1);
$authors = $product->authors; // Lấy tất cả tác giả của sản phẩm
$editors = $product->editors; // Lấy tất cả biên tập viên của sản phẩm

Okay mọi người hãy thử cách trên thử xem 

Bài Viết Liên Quan

x

Xin chào! Hãy ủng hộ chúng tôi bằng cách nhấp vào quảng cáo trên trang web. Việc này giúp chúng tôi có kinh phí để duy trì và phát triển website ngày một tốt hơn. (Hello! Please support us by clicking on the ads on this site. Your clicks provide us with the funds needed to maintain and improve the website continuously.)

Ngoài ra, hãy đăng ký kênh YouTube của chúng tôi để không bỏ lỡ những nội dung hữu ích! (Also, subscribe to our YouTube channel to stay updated with valuable content!)

Đăng Ký