mysql有表'订阅'表格及其如下:
column type
id int
condition json
type_id id
和示例如下:
"id": "1",
"condition": "{\"id\":\"2\",\"class\":\"master\",\"zone\":\"west\",\"price\":\"511\"}",
"type_id": "1"
我想在列条件中选择匹配的列,如" zone" =" west" laravel 5.2支持订单
$subscribe = DB::table('subscribe')->where('condition->class', 'master')->get();
错误
Column not found: 1054 Unknown column 'condition->class' in 'where clause'(
SQL: select * from `subscribe` where `condition->class` = master)
我需要得到的条件符合conditon-> class = master的条件。我需要选择符合模型需要的数据。 我不知道什么是错的。任何帮助将不胜感激。
答案 0 :(得分:4)
我相信正确的语法是:
$subscribe = DB::table('subscribe')->where('condition->"$.class"', 'master')->get();
请参阅本段下方的示例,https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
- 列 - >路径
在MySQL 5.7.9及更高版本中, - >当与两个参数一起使用时,operator充当JSON_EXTRACT()函数的别名,左侧是列标识符,右侧是根据JSON文档评估的JSON路径(列值)。您可以在SQL语句中的任何位置使用此类表达式代替列标识符。
答案 1 :(得分:0)
问题是查询中的where子句在condition->类中被视为列名而不是laravel代码。你想从json中提取值。但查询并不了解。
您需要做的是将整个表格以json格式传递给视图,然后在视图中提取。
我建议做这样的事情: 这里,$ subscribe在json中有整个表。您可以通过以下方式访问它:
$subscribe = DB::table('subscribe')->all();
return response()->json(array('subscribe' => $subscribe));
然后在视图中执行:
@if($subscribe->condition->class == 'master')
id : {{ $subscribe->id }}
type id : {{ $subscribe->type_id }}
@endif
更新代码
//get condition in json
$subscribe = DB::table('subscribe')->select('condition')->get();
then,
// convert json to array
$subscribe_array = json_decode($subscribe, true);
// create a new collection instance from the array
$collection_array = collect($subscribe_array);
if($collection_array['class'] == 'master')
{
//do something
}
这样的事情可以解决问题