Reputation: 29
I have this data
"sales_order_id": 25,
"reff_id": null,
"customer_id": 1,
"logistics_id": 3,
"discount_code": null,
"subtotal": 1800000,
"shipping_cost": 0,
"discount_amount": 0,
"tax": "0",
"status": "Open",
"date_of_sales": "2021-11-09",
"grand_total": 1800000,
"users_id": 1,
"product_sales": [
{
"product_sales_order_id": 72,
"sales_order_id": 25,
"product_id": 1,
"price": 51000,
"qty_order": "10.00",
"bonus_item": 0,
"discount": 0,
"total": 0
},
{
"product_sales_order_id": 73,
"sales_order_id": 25,
"product_id": 1,
"price": 51000,
"qty_order": "1.00",
"bonus_item": 1,
"discount": 0,
"total": 0
},
{
"product_sales_order_id": 74,
"sales_order_id": 25,
"product_id": 2,
"price": 129000,
"qty_order": "1.00",
"bonus_item": 1,
"discount": 0,
"total": 0
},
]
And I just want product sales with "bonus_item" = 1, this is my Laravel code
$bonus_item = SalesOrder::with(['product_sales'])
->whereHas('product_sales', function($query){
$query->where('bonus_item', '=', true);
})
->get();
how I can use "Where" clause in relation data?, I was try with "WhereRelation", but only work like the code right there.
Upvotes: 0
Views: 66
Reputation: 1291
like @lagbox said, you can use constraining eager loading, which syntax is a bit different than the whereHas method.
You can do something like this:
$bonus_item = SalesOrder::whereHas('product_sales', function ($query) {
$query->where('bonus_item', true);
})->with(['product_sales' => function ($query) {
$query->where('bonus_item', true);
}])->get();
For the examples in the docs: https://laravel.com/docs/master/eloquent-relationships#constraining-eager-loads
Upvotes: 1