Yoga Arliza
Yoga Arliza

Reputation: 29

How to give "where" in relation data with laravel

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

Answers (1)

Dennis
Dennis

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

Related Questions