Hi 🤓 Cảm ơn bạn đã ghé thăm blog này, nếu những bài viết trên blog giúp ích cho bạn. Bạn có thể giúp blog hiển thị quảng cáo bằng cách tạm ngừng ad blocker 😫 và để giúp blog duy trì hoạt động nếu bạn muốn.
Cảm ơn bạn!

Hi các bạn. Trong bài viết này mình sẽ giới thiệu đến các bạn cách sử dụng withSum() với điều kiện trong laravel nhé 😊.

withSum() trong laravel

Trước tiên mình sẽ tạo 2 table là CategoryProduct.

Category model

Category sẽ chứa nhiều Product nên quan hệ sẽ là hasMany.

class Category extends Model
{
    use HasFactory;
    protected $table = 'category';

    function products()
    {
        return $this->hasMany(Product::class);
    }
}

Product model

class Product extends Model
{
    use HasFactory;

    protected $table = 'product';
    protected $fillable = [
        'name', 'category_id', 'price'
    ];
}

Đầu tiên ta sẽ sử dụng withSum() trong laravel như sau:

class CategoryController extends Controller
{
    function get()
    {
        $categories = Category::select("id", "name")
                        ->withSum('products', 'price')
                        ->get();
    }
}

Kết quả trả về bao gồm thuộc tính {relation}_{function}_{column} (products_sum_price]).

Chúng ta có thể đặt một tên khác nếu bạn muốn:

$categories = Category::withSum('produtcs as total_products', 'price')->get();

foreach ($categories as $category) {
    echo $category->total_products;
}

Trong trường hợp ta muốn tính tổng theo một điều kiện nào đó, ta sẽ dùng withSum() với điều kiện cho trước bằng cách sử dụng query như sau:

 $categories = 
 Category::withSum(
   ['products' => function ($query) {
     $query->where('price','>=',10000)
   }], 'price'
 )
 ->get()

Nếu muốn các bạn có thể viết gọn lại:

 $categories = 
 Category::withSum(
   ['products' => fn($query) => $query->where('price','>=',10000)], 'price'
 )
 ->get()

Ở ví dụ trên, ta sẽ tìm các Product có price >= 10000 và tính tổng tiền.

Kết luận

Như vậy là mình đã hướng dẫn cho các bạn cách sử dụng withSum() kèm điều kiện (nếu cần). Hy vọng bài viết này giúp ích cho các bạn 😁.

Hẹn gặp các bạn trong các bài viết sắp tới.

Có thể bạn thích ⚡
homiedev
About Me

Hi, I'm @devnav. Một người thích chia sẻ kiến thức, đặc biệt là về Frontend 🚀. Trang web này được tạo ra nhằm giúp các bạn học Frontend hiệu quả hơn 🎉😄.

Chúc các bạn tìm được kiến thức hữu ích trong blog này 😁😁.