Laravel / Eloquent:只获取mysql json字段的{subjson}

时间:2017-05-22 07:17:47

标签: mysql json laravel eloquent

我有一个mysql数据库(MySQL 5.7.1),其中包含一个名为" 库存 "的表格。该表包含2列:

  • parentId {String}
  • dataInv {json}

因此,我表中的每个条目都包含一个json数据,定义如下:

{
    testId : "4",
    lang : "en",
    subTask : {
        inv : {
           hasright : true,
           isNew : false
        }
    }
}

在我的库存模型类中,我定义了:

 protected $casts = [
     'dataInv' => 'array',
 ];

在我的InventoryController中,我定义了一个方法来获取" inv"给定parentId的结构:

public function getInventoryByParentId($parentId) {
    $inventory = Inventory::where('parentId', $parentId)->first();
    return response()->json($inventory);
}

此函数工作正常,但将整个结构作为json返回。例如,对于parentId:4:

{
    parentId : 4,
    dataInv : {
        {
            testId : "4",
            lang : "en",
            subTask : {
                inv : {
                   hasright : true,
                   isNew : false
                }
            }
        }
    }
}

但我想只检索subJson" inv" :

inv : {
    hasright : true,
    isNew : false
} 

我只能检索这个json' inv'通过在第一个请求中直接制作过滤器? :

$inventory = Inventory::where('parentId', $parentId)->first();

1 个答案:

答案 0 :(得分:0)

如果您想要不同的结果,您应该更改返回的内容:

Inventory

修改

如果您想要更好地构建它,请在public function getSubTaskAttribute() { return $this->dataInv['subTask']; } 模型中创建一个subTask方法:

public function getInventoryByParentId($parentId) {
    $inventory = Inventory::where('parentId', $parentId)->first();
    return response()->json($inventory->sub_task);
}

因为您可以在方法中更轻松地检索它:

 DateTime DateofBirth = DateTime.Now;


 if (DateofBirth .ToString() == null || DateofBirth .ToString() ==string.Empty)
      { 
       // do something
      }