我正在尝试找出正确的语法,以便在下面雄辩的原始查询中添加and运算符,在该查询中,我正在查询mysql(5.7.9)表的json字段。在这样做时,我希望能够有案件不敏感的能力。
在对如何实现这一点做了初步研究之后,我的代码基本上是这样工作的:
$users = User::whereRaw('lower(info_json->"$.full_name") like lower(?)', ["%{$user_name}%"])
但我的目标是添加一个and操作符,用一个非json varchar列进一步缩小结果范围。
我尝试过这个(以及其他没有成功的变体):
$users = User::whereRaw('lower(info_json->"$.full_name") like lower(?)', 'and user_type = admin', ["%{$user_name}%"])
这给了我一个错误:“数组到字符串的转换”
我也尝试过:
$users = User::whereRaw('lower(info_json->"$.full_name") like lower(?) and user_type = admin', ["%{$user_name}%"])
这给了我以下错误:“sqlstate[42s22]:column not found:1054 unknown column'user\u type'in'where子句”
其他没有导致错误的类似变化产生了太多或太少的结果。
如何成功地调整语法,以查询具有正确结果的其他非json字段?另外,对于eloquent、mysql(5.79)和Laravel5.6,这样的原始查询是最有效的方法吗?
感谢您提供的所有帮助/指导!:)
2条答案
按热度按时间jaql4c8m1#
我想出来了。我的语法应该是这样的:
感谢那些帮助过我们的人!就像很多语法/编码问题一样,稍微休息一下有助于我在返回时很快找到答案。
qyuhtwio2#
我觉得你应该做些
可能我有一些sintax错误,但主要思想是使用
DB::raw
以帮助您进行查询。