首页 > 解决方案 > Laravel 根据关系结果返回数据

问题描述

PostController.php

$customers = $query->orderBy('id', 'desc')->with('agents:agents.id')->get();
        foreach ($customers as $customer) {
            $customer->calculator = $this->calculator($customer);
        }

        return response()->json($customers, 200 );

Post.php

function agents()
    {
        return $this->belongsToMany('App\Agent','files','post_id','agent_id');
    }

这将返回正确的数据,如下所示:

[{
    "id": 5,
    "hash": "SqB29tkfm1dwGsXp4ZCV",
    "agents": [{
      "id": 1,
      "pivot": {
        "post_id": 5,
        "agent_id": 1
      }
    }]
  },
  {
    "id": 4,
    "hash": "SqH29tkfm1dwGsXp4ZCV",
    "agents": []
  },
  {
    "id": 3,
    "hash": "RqH29tkfm1dwGsXp4ZCV",
    "agents": [{
      "id": 1,
      "pivot": {
        "post_id": 3,
        "agent_id": 1
      }
    }]
  },
  {
    "id": 1,
    "hash": "RqH29tkfm1dwGrXp4ZCV",
    "agents": [{
      "id": 1,
      "pivot": {
        "post_id": 1,
        "agent_id": 1
      }
    }]
  }
]

但我想要的是只返回那些有空代理的数据[],在这种情况下,应该只返回 id4因为代理数组是空的。我怎样才能做到这一点?

标签: phplaravel

解决方案


试试这个 :

$customers = $query->orderBy('id', 'desc')->whereDoesntHave('agents')->get();

如果你想得到没有代理的客户。在这里阅读更多


推荐阅读