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

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=