Sử dụng Laravel Eloquent withSum() and withCount()

Bài viết này mình sẽ giới thiệu các bạn cách sử dụng withSum() and withCount() với laravel relationship eloquent. Để demo ví dụ mình sẽ tạo 2 tables là Category và Product và tạo relationship cho chúng. Bạn có thể sử dụng withSum() & withCount() với laravel 6, laravel 7 & laravel 8 version. Hãy

Bài viết này mình sẽ giới thiệu các bạn cách sử dụng withSum() and withCount() với laravel relationship eloquent.
Để demo ví dụ mình sẽ tạo 2 tables là Category và Product và tạo relationship cho chúng.
Bạn có thể sử dụng withSum() & withCount() với laravel 6, laravel 7 & laravel 8 version.
Hãy xem ví dụ bên dưới nhé:

Category Model:

<?phpnamespaceAppModels;useIlluminateDatabaseEloquentFactoriesHasFactory;useIlluminateDatabaseEloquentModel;classCategoryextendsModel{useHasFactory;/**
     * Get the products.
     */publicfunctionproducts(){return$this->hasMany(Product::class);}}

Product Model:

<?phpnamespaceAppModels;useIlluminateDatabaseEloquentFactoriesHasFactory;useIlluminateDatabaseEloquentModel;classProductextendsModel{useHasFactory;protected$fillable=['name','price'];}

Ví dụ withSum() :

<?phpnamespaceAppHttpControllers;useAppModelsCategory;classSignaturePadControllerextendsController{/**
     * Write code on Method
     *
     * @return response()
     */publicfunctionindex(){$categories=Category::select("id","name")->withSum('products','price')->get()->toArray();dd($categories);}}

Output:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Mobile
            [products_sum_price] => 330
        )
    [1] => Array
        (
            [id] => 2
            [name] => Laptop
            [products_sum_price] => 410
        )
)

sử dụng conditions trong withSum():

<?phpnamespaceAppHttpControllers;useAppModelsCategory;classSignaturePadControllerextendsController{/**
     * Write code on Method
     *
     * @return response()
     */publicfunctionindex(){$categories=Category::select("id","name")->withSum(['products'=>function($query){$query->where('publish',1);}],'price')->get()->toArray();dd($categories);}}

Mình đã thêm điều kiện trong hàm withsum ở trên chỉ những thằng có publish =1 thì mới tính tổng

Ví dụ withCount():

<?phpnamespaceAppHttpControllers;useAppModelsCategory;classSignaturePadControllerextendsController{/**
     * Write code on Method
     *
     * @return response()
     */publicfunctionindex(){$categories=Category::select("id","name")->withCount('products')->get()->toArray();dd($categories);}}

Output:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Mobile
            [products_count] => 3
        )
    [1] => Array
        (
            [id] => 2
            [name] => Laptop
            [products_count] => 2
        )
)

Mình hy vọng bài viết này sẽ giúp ích cho các bạn!
Tham khảo: https://www.itsolutionstuff.com

Nguồn: viblo.asia

Bài viết liên quan

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th