如何给 "where" 与 laravel 相关的数据
How to give "where" in relation data with laravel
我有这个数据
"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
},
]
我只想用“bonus_item”= 1 销售产品,这是我的 Laravel 代码
$bonus_item = SalesOrder::with(['product_sales'])
->whereHas('product_sales', function($query){
$query->where('bonus_item', '=', true);
})
->get();
如何在关系数据中使用“Where”子句?我尝试使用“WhereRelation”,但只能像那里的代码一样工作。
就像@lagbox说的,你可以使用constraining eager loading,它的语法与whereHas方法有点不同。
你可以这样做:
$bonus_item = SalesOrder::whereHas('product_sales', function ($query) {
$query->where('bonus_item', true);
})->with(['product_sales' => function ($query) {
$query->where('bonus_item', true);
}])->get();
对于文档中的示例:https://laravel.com/docs/master/eloquent-relationships#constraining-eager-loads
我有这个数据
"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
},
]
我只想用“bonus_item”= 1 销售产品,这是我的 Laravel 代码
$bonus_item = SalesOrder::with(['product_sales'])
->whereHas('product_sales', function($query){
$query->where('bonus_item', '=', true);
})
->get();
如何在关系数据中使用“Where”子句?我尝试使用“WhereRelation”,但只能像那里的代码一样工作。
就像@lagbox说的,你可以使用constraining eager loading,它的语法与whereHas方法有点不同。
你可以这样做:
$bonus_item = SalesOrder::whereHas('product_sales', function ($query) {
$query->where('bonus_item', true);
})->with(['product_sales' => function ($query) {
$query->where('bonus_item', true);
}])->get();
对于文档中的示例:https://laravel.com/docs/master/eloquent-relationships#constraining-eager-loads