我有一个 where 语句,其中包含 JSON_extract 方法。 JSON_extract 使用一个名为的可为空列new_value
or old_value
。如果列包含 JSON 字符串,则该检查有效,但当列为 NULL 时,where 语句将得到确认。
->where(function($query) use ($other_key, $new_change) {
$query->where(DB::raw('json_extract(old_value, "$.theme_id") = 1))
->orWhere(DB::raw('json_extract(new_value, "$.theme_id") = 1));
当。。。的时候new_value
or the old_value
为 NULL 行被返回,但 NULL 的 theme_id 显然不等于 1。有人能解释一下这里发生了什么吗?
This:
->where(function($query) use ($other_key, $new_change) {
$query->where(DB::raw('json_extract(old_value, "$.theme_id") = 1))
->orWhere(DB::raw('json_extract(new_value, "$.theme_id") = 1));
应该:
->where(function($query) use ($other_key, $new_change) {
$query->where(DB::raw("json_extract(old_value, '$.theme_id')"), 1);
->orWhere(DB::raw("json_extract(new_value, '$.theme_id')"), 1);
这就是 Laravel 中的 where 语句的工作原理。我没有插入第二个参数,这就是 Laravel 假设我正在检查 NULL 的原因。现在可以了,为我的愚蠢感到抱歉。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)