我正在使用laravel框架来开发API,我有一个包含对象数组的表,我需要搜索标签,我必须以逗号分隔格式获取ID,因为我正在使用Json表概念,它抛出了以下错误,您能帮助我解决这个问题吗?
- 错误**
"SQLSTATE[42S22]: Column not found: 1054 Unknown column 't1' in 'where clause' (SQL: select (SELECT id FROM JSON_TABLE( pfl_optionsvalue,'$[*]' COLUMNS( label VARCHAR(40) PATH '$.label', TYPE VARCHAR(40) PATH \r\n '$.type', id VARCHAR(40) PATH '$.id' ) ) AS jt WHERE jt.label IN (t1,t2,t3) ) AS ss from `bm_predefinedlabels` where `pfl_id` = 514)",
- 代码**
$a = '('.$customarray[$primaryId].')'; // $a = "(t1,t2,t3)"
$temp = bm_predefinedlabels::where('pfl_id',$primaryId)
->select(DB::raw("(SELECT id FROM JSON_TABLE( pfl_optionsvalue,'$[*]' COLUMNS( label VARCHAR(40) PATH '$.label', TYPE VARCHAR(40) PATH
'$.type', id VARCHAR(40) PATH '$.id' ) ) AS jt WHERE jt.label IN {$a} ) AS ss"))
->get();
- pfl_optionsvalue数据的表列**
[{"label":"t1","checked":false,"id":1,"delete":0,"validationerror":null},{"label":"t2","checked":false,"id":2,"delete":0,"validationerror":null}]
1条答案
按热度按时间guykilcj1#
错误消息指示未找到“where子句”中的列“t1”。这是因为$a的值是“(t1,t2,t3)",该值作为字符串传递,但需要作为值列表传递。可以使用explode()函数将字符串转换为数组,然后使用inplode()将数组转换为字符串。
然后在SQL查询的IN语句中传递变量$a。
您还需要确保您的MySQL版本支持JSON_TABLE函数。