如何从Laravel中不是数组的对象中删除键

时间:2018-08-01 11:23:58

标签: php laravel laravel-5 associative-array laravel-5.6

我使用此查询从数据库中获取数据

$cats = Category::with(['cat_trans' => function($q) use($lang){
        $q->where('lang_code', $lang);
    }])->with(['cat_prod' => function($query) use ($lang,$currency){
        $query->with(['pro_trans' => function ($q) use ($lang){
            $q->where('lang_code', $lang);
        }]);
        ////////////
        $query->with(['pro_price' => function ($q) use ($currency){
            $q->with('currency_code')->where('cur_code', $currency);
        }]);
        ///////////
    }])->whereHas('account_type', function($qr) use ($account_type){
        $qr->where('account_type_id', $account_type);
    })->get();

我正在尝试从结果中删除空对象,当我尝试这样做时,我得到以下响应

{
"1": {
    "id": 1,
    "parent_id": null,
    "order": 1,
    "name": "Moblie",
    "slug": "mobile-1",
    "created_at": "2018-07-08 09:41:08",
    "updated_at": "2018-07-08 10:30:17",
    "cat_trans": [
       {
         "id": 1,
         "category_id": 1,
         "field": "title",
         "value": "Mobile",
         "lang_code": "en",
         "created_at": "2018-07-08 09:51:59",
         "updated_at": "2018-07-08 09:51:59"
       },
       {
         "id": 2,
         "category_id": 1,
         "field": "desc",
         "value": "smart",
         "lang_code": "en",
         "created_at": "2018-07-08 09:52:41",
         "updated_at": "2018-07-08 09:52:41"
       },
       {
         "id": 12,
         "category_id": 1,
         "field": "slug",
         "value": "mobile-1",
         "lang_code": "en",
         "created_at": null,
         "updated_at": null
       }
    ],
   }
}

我想从所有响应中删除键“ 1”。

我使用unset通过此代码获取此值

foreach ($cats as $k) {
        if (count($k->cat_prod) == 0) {
            unset($cats[$va]);
        }
        $va++;

    }

然后我尝试使用array_values,但显示我只能在不是对象的数组上使用array_values。

3 个答案:

答案 0 :(得分:0)

只需执行以下操作即可删除键“ 1”

array_values((array)$cats)

由于Laravel Query返回对象,导致您收到诸如“只能在数组上使用”之类的函数错误,所以您只需要对其进行类型转换。

答案 1 :(得分:0)

$ cats-> toArray(),如果您需要将对象转换为数组或在某些特定条件下进行转换

答案 2 :(得分:0)

您的输出看起来像JSON,因此您可以执行此操作以消除1

json_encode( $cats->{1} );