Cảm ơn bạn!
Sử dụng withSum với điều kiện cho trước trong Laravel
Hi các bạn. Trong bài viết này mình sẽ giới thiệu đến các bạn cách sử dụng withSum() với điều kiện trong laravel nhé 😊.
withSum() trong laravel
Trước tiên mình sẽ tạo 2 table là Category và Product.
Category model
Category sẽ chứa nhiều Product nên quan hệ sẽ là hasMany.
class Category extends Model
{
use HasFactory;
protected $table = 'category';
function products()
{
return $this->hasMany(Product::class);
}
}
Product model
class Product extends Model
{
use HasFactory;
protected $table = 'product';
protected $fillable = [
'name', 'category_id', 'price'
];
}
Đầu tiên ta sẽ sử dụng withSum()
trong laravel như sau:
class CategoryController extends Controller
{
function get()
{
$categories = Category::select("id", "name")
->withSum('products', 'price')
->get();
}
}
Kết quả trả về bao gồm thuộc tính {relation}_{function}_{column}
(products_sum_price]).
Chúng ta có thể đặt một tên khác nếu bạn muốn:
$categories = Category::withSum('produtcs as total_products', 'price')->get();
foreach ($categories as $category) {
echo $category->total_products;
}
Trong trường hợp ta muốn tính tổng theo một điều kiện nào đó, ta sẽ dùng withSum() với điều kiện cho trước bằng cách sử dụng query như sau:
$categories =
Category::withSum(
['products' => function ($query) {
$query->where('price','>=',10000)
}], 'price'
)
->get()
Nếu muốn các bạn có thể viết gọn lại:
$categories =
Category::withSum(
['products' => fn($query) => $query->where('price','>=',10000)], 'price'
)
->get()
Ở ví dụ trên, ta sẽ tìm các Product có price >= 10000 và tính tổng tiền.
Kết luận
Như vậy là mình đã hướng dẫn cho các bạn cách sử dụng withSum() kèm điều kiện (nếu cần). Hy vọng bài viết này giúp ích cho các bạn 😁.
Hẹn gặp các bạn trong các bài viết sắp tới.