我似乎无法解决这个问题。
我在一个名为import modules from 'MDBReact/module';
的json列中获得了几种翻译,我只想选择没有针对特定语言(未设置或text
)没有空翻译的记录。
我很难创建一个查询,如果该值设置为null
,则该查询不返回记录。
以下是一些null
列的json值,在此示例中,我需要一个仅返回第一条记录的查询,在该记录中,我对text
值进行了翻译:
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
让我们尝试排除fr设置为null的记录。但也没有运气:
text: "{"de": "hallo", "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();
的{{1}}值?
答案 0 :(得分:0)
我在类似的Stackoverflow thread中找到了解决方案。对于具有初学者知识的人,这不是一个非常明显的问题。
在我先前的查询尝试中,json列中的null
值似乎不等于相同的null
值。需要对其进行如下调整,然后才能起作用。基本上,首先需要使用以下代码将空值更改为相同的null
值类型:
CAST("null" AS JSON)
然后将其放入查询中:
parent::whereRaw( 'JSON_EXTRACT(text, "$.fr") <> CAST("null" AS JSON)' )->get();