如果变量为空,我如何在JSON中隐藏数据

时间:2018-01-15 15:28:04

标签: php json laravel rest

我在Laravel应用程序中遇到一些麻烦,在搜索功能中,当我搜索结果时

{
    "data": [
        {
            "id": 2,
            "user_id": 8,
            "identity_number": "213918273",
            "name": "Pekerja_2",
            "gender_id": 1,
            "date_of_birth": "1999-05-25",
            "address": "Jalan Bandung Raya no 50",
            "province_id": 32,
            "city_id": 3273,
            "district_id": 3273160,
            "phone": "4232343432",
            "image": null,
            "created_at": "2018-01-11 10:59:54",
            "updated_at": "2018-01-11 10:59:54",
            "partner_id": null,
            "skill": [
                {
                    "id": 3,
                    "worker_id": 2,
                    "skill_id": 6,
                    "sub_skill_id": 18,
                    "created_at": "2018-01-15 13:06:48",
                    "updated_at": "2018-01-15 13:06:48",
                    "price": null,
                    "unit": null
                }
            ]
        },
        {
            "id": 3,
            "user_id": 16,
            "identity_number": "213918273",
            "name": "Pekerja_3",
            "gender_id": 1,
            "date_of_birth": "1999-05-25",
            "address": "Jalan Bandung Raya no 50",
            "province_id": 32,
            "city_id": 3273,
            "district_id": 3273160,
            "phone": "2345234234",
            "image": null,
            "created_at": "2018-01-15 13:06:48",
            "updated_at": "2018-01-15 13:06:48",
            "partner_id": null,
            "skill": []
        }
    ]
}

你可以看到"技能"身份证号码3为空,我希望身份证号码3中的所有人也是空的。 我的控制器是:

  $worker = Worker::with(['skill' => function($q) use ($request) {
        $q->where('worker_skills.sub_skill_id', $request['sub_skill_id']);
    }])->whereHas('skill');

我想要这样的事情:

{
    "data": [
        {
            "id": 2,
            "user_id": 8,
            "identity_number": "213918273",
            "name": "Pekerja_2",
            "gender_id": 1,
            "date_of_birth": "1999-05-25",
            "address": "Jalan Bandung Raya no 50",
            "province_id": 32,
            "city_id": 3273,
            "district_id": 3273160,
            "phone": "2534234234",
            "image": null,
            "created_at": "2018-01-11 10:59:54",
            "updated_at": "2018-01-11 10:59:54",
            "partner_id": null,
            "skill": [
                {
                    "id": 3,
                    "worker_id": 2,
                    "skill_id": 6,
                    "sub_skill_id": 18,
                    "created_at": "2018-01-15 13:06:48",
                    "updated_at": "2018-01-15 13:06:48",
                    "price": null,
                    "unit": null
                }
            ]
        },
    ]
}

重点是,如果"技能"变量为空,然后数据不显示,反之亦然。 谢谢你的任何帮助都会感激,抱歉英文不好

2 个答案:

答案 0 :(得分:1)

您可以使用与whereHas功能相同的过滤器向with功能添加回调

$worker = Worker::with(['skill' => function($q) use ($request) {
    $q->where('worker_skills.sub_skill_id', $request['sub_skill_id']);
}])
->whereHas('skill', function($q) use ($request) {
    $q->where('worker_skills.sub_skill_id', $request['sub_skill_id']);
})
->get();

答案 1 :(得分:1)

你可以尝试这个 $worker = Worker:has('skill')->get(); 只有至少拥有一项技能的工人才能包含在集合中