Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

where使用json语法查询时报错 #1499

Open
moshengrenzenme opened this issue Jul 8, 2020 · 4 comments
Open

where使用json语法查询时报错 #1499

moshengrenzenme opened this issue Jul 8, 2020 · 4 comments

Comments

@moshengrenzenme
Copy link

DESC

ENV

OS Platform: ubuntukylin2004

Node.js Version:12.10

ThinkJS Version:2.2.9

code

that.model('table', 'test').where({ 'JSON_EXTRACT(groups,"$[*].name")': '' }).order('create_time desc').select()

error message

Error: INVALID_WHERE_CONDITION_KEY

more description

// your detail description
使用json语法时会触发parseWhere内部设置的一个正则表达式,这个表达式本来是用于过滤出安全字段的,但是把json也给过滤了

@lizheming
Copy link
Contributor

是的,think-model 对于 JSON 的 MySQL 解析还没有很好的支持。主要是因为我们没有这块的需求,如果你有这方面的经验的话欢迎帮忙提交下 PR。

目前针对你这个问题的临时解决方法就是 .where('JSON_EXTRACT(groups,"$[*].name")') 直接传入字符串即可,字符串的话不会走那个校验逻辑。

@moshengrenzenme
Copy link
Author

是的,think-model 对于 JSON 的 MySQL 解析还没有很好的支持。主要是因为我们没有这块的需求,如果你有这方面的经验的话欢迎帮忙提交下 PR。

目前针对你这个问题的临时解决方法就是 .where('JSON_EXTRACT(groups,"$[*].name")') 直接传入字符串即可,字符串的话不会走那个校验逻辑。

我看了源代码,也知道字符串不会走那个逻辑,但是关键是字符串的话只能用一次,虽然可以和object连用,但是仍旧可能不够用,我会用一点json,pr不知道行不行,毕竟我水平不够

@lizheming
Copy link
Contributor

可以试试~ 只要能过单元测试,改起来也不用太担心啦其实

@moshengrenzenme
Copy link
Author

可以试试~ 只要能过单元测试,改起来也不用太担心啦其实

谢谢鼓励,我晚上回去了想想看怎么改

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants