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

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ