我似乎无法解决这个问题。
我在名为 的 json 列中有几个翻译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
?