猿问

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因为代理数组是空的。我怎样才能做到这一点?


狐的传说
浏览 163回答 2
2回答

红糖糍粑

尝试这个 :$customers = $query->orderBy('id', 'desc')->whereDoesntHave('agents')->get();如果你想得到没有代理的客户。在这里阅读更多

临摹微笑

你可以同时使用 dontHave 或 whereDoesntHave like$customers = $query->orderBy('id', 'desc')->doesntHave('agents')->get();或者$customers = $query->orderBy('id', 'desc')->whereDoesntHave('agents')->get();
随时随地看视频慕课网APP
我要回答