是否可以在Laravel的映射函数中应用条件?
我想在食品商中应用一些条件。是否可以在映射函数中应用条件,该函数充当where$foodOrder->foodOrders->where('invoice_id',null)->get() 下面是此查询返回的输出。但我只想要发票id为空的数据是否可以在Laravel的映射函数中应用条件?,laravel,laravel-5,eloquent,laravel-4,Laravel,Laravel 5,Eloquent,Laravel 4,我想在食品商中应用一些条件。是否可以在映射函数中应用条件,该函数充当where$foodOrder->foodOrders->where('invoice_id',null)->get() 下面是此查询返回的输出。但我只想要发票id为空的数据 { "success": true, "message": "Lists of Table.", "data": [ { "id&qu
{
"success": true,
"message": "Lists of Table.",
"data": [
{
"id": 2,
"table_number": "TN02",
"food_orders": [
{
"id": 16,
"food_items_id": 1,
"table_id": 2,
"invoice_id": null,
"quantity": 2,
"price": "2000.00"
},
{
"id": 17,
"food_items_id": 2,
"table_id": 2,
"invoice_id": null,
"quantity": 3,
"price": "150.00"
}
]
},
{
"id": 1,
"table_number": "TN01",
"created_at": "2020-10-25 10:44:31",
"updated_at": "2020-10-25 10:44:31",
"food_orders": [
{
"id": 14,
"food_items_id": 1,
"table_id": 1,
"invoice_id": 39,
"quantity": 1,
"price": "2000.00"
}
]
}
]
}
我认为您需要使用的是
过滤器
,而不是地图
。还是我错了?不是最好的方法,但这应该可以奏效
$table->map(function($foodOrder){
$foodOrder->foodOrders=$foodOrder->foodOrders()->where('invoice_id',null)->get();
});
注意作用域,您需要它们应用where条件。我们说
=
,这样进一步的变化就会传播。您可以过滤掉食品订单的白名单记录
$table->map(函数($record){
$record->food\u orders=收集($record->food\u orders)
->过滤器(fn($foodOrder)=>is_null($foodOrder->invoice_id));
返回$record;
});
从上面显示的输出数据来看,模型上的食物订单似乎是一个hasMany关系,因此在快速加载时很容易过滤掉该关系
假设表模型为食品订单定义了一个关系
类表扩展模型
{
公共功能食品订单()
{
返回$this->hasMany(FoodOrder::class);
}
//…类代码的其余部分
}
您可以在加载时约束相关模型
$table=table::with([
“食品订单”=>fn($query)=>$query->whereNull('invoice\u id'))
])
->跳过($skip)
->接受($限额)
->orderBy('id','desc')
->get();
谢谢你这对我来说很有用
$table->map(function($foodOrder){
$foodOrder->foodOrders=$foodOrder->foodOrders()->where('invoice_id',null)->get();
});