我似乎不能把我的头围绕着这个。
我在一个名为 text
,我只想选择那些没有特定语言的空翻译的记录(未设置或未设置) null
).
我很难创建一个如果值设置为 null
. 这里有一些 text
列json值,我需要一个只返回本例中第一条记录的查询,在这里我有一个 fr
价值:
text: "{"de": "danke", "fr": "merci"}"
text: "{"de": "hallo", "fr": null}"
text: "{"de": "und"}"
以下是我迄今为止尝试的:
parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") is not null' )->get();
->退货
text: "{"de": "danke", "fr": "merci"}"
text: "{"de": "hallo", "fr": null}"
真倒霉。它跳过了记录 fr
一点也不设置(没关系),但会继续选择记录的位置 fr
设置为 null
. 因此,我需要调整查询以排除 "fr": null
让我们一步一步来处理这个问题。当我尝试对这样的字符串进行正匹配搜索时:
parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") = "merci"' )->get();
->退货
text: "{"de": "danke", "fr": "merci"}"
这是正确的。现在,似乎很容易找到一种方法来改变这一点,并排除带有 "fr": null
. 但运气不好。
parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> "merci"' )->get();
->只返回 fr
已设置,但不等于 merci
. 它跳过了记录 fr
未设置。
text: "{"de": "hallo", "fr": null}"
让我们尝试排除fr设置为null的记录。但也没有运气:
parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> "null"' )->get();
->退货
text: "{"de": "danke", "fr": "merci"}"
text: "{"de": "hallo", "fr": null}"
或者,
parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> null' )->get();
->返回空结果。
我怎么能排除 fr
未设置或设置为 null
?
1条答案
按热度按时间7z5jn7bk1#
我在一个类似的stackoverflow线程中找到了一个解决方案。对于初学者来说,这不是一个很明显的问题。
看来
null
json列中的值的计算结果不相同null
我以前的查询尝试中的值。它需要调整如下,然后才能工作。基本上,需要首先将空值更改为相同的值null
具有以下代码的值类型:然后将其放入查询中: