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