Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在Laravel的映射函数中应用条件?_Laravel_Laravel 5_Eloquent_Laravel 4 - Fatal编程技术网

是否可以在Laravel的映射函数中应用条件?

是否可以在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

我想在食品商中应用一些条件。是否可以在映射函数中应用条件,该函数充当where$foodOrder->foodOrders->where('invoice_id',null)->get()

下面是此查询返回的输出。但我只想要发票id为空的数据

{
  "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();
});