Laravel:查询以从mysql 5.7中的JSON列获取单个列

时间:2017-05-20 09:09:11

标签: php mysql json laravel

我有一个带有表"库存"的mysql数据库(5.7.1)。包含2列:

  • id {String}
  • content {json}

内容列包含带有多个键的json:

{
     "id" : "myId",
     "arrayOfEl" : [
        {id : "1", always : true},
        {id : "1", always : true}
     ]
}

我尝试在laravel中进行查询,只从指定id的内容列中获取arrayOfEl键:

$inventory = Inventory::where('id', "myId")->get(????);

如何知道查询中的指定位置只能获得响应中的子列arrayOfEl?

2 个答案:

答案 0 :(得分:0)

除非您的表格为json类型,否则您可能需要获取整行,然后尝试过滤它们。确保在模型上定义属性强制转换,例如使用集合

protected $casts = [
    'arrayOfEl' => 'collection',
];

然后尝试找到匹配

$myId = 'myId'; // id of content
$inventory = Inventory::all()->filter(function ($item) use ($myId) {
   return is_object($item->content) && $item->content->id == $myId;
})->first();

或者如果您有json类型列。您只需根据->表示法对其进行过滤即可。

->where('content->id', 'myId')

答案 1 :(得分:0)

您可以使用pluck仅获取所需的列。

$inventory = Inventory::where('id', 'myId')->pluck('arrayOfEl');