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

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s