如何使用 Laravel 在数据库中搜索未知的 属性 名称
How to search through unknown property name in database with Laravel
我正在尝试使用 json 搜索包含 laravel 方法的数据库。这是我的 JSON 一个数据库行:
{
"row": {
"1": {
"ID":"110555175667"
},
"2": {
"ID":"11023235667"
},
"3": {
"ID":"11001414141667"
},
"4": {
"ID":"11023235667"
},
"5": {
"ID":"1100012222225667"
},
}
}
我想搜索 ID,但是如您所见,有数字作为属性。
在示例中我想找到 11023235667
。我已经试过了:
->whereJsonContains('json', [['row' => ['1' => ['ID' => '11023235667']]]])
但是没有用。我该怎么做?
编辑:
我也试过这个:
->whereRaw('JSON_CONTAINS(json, "$.row.*.ID", "11023235667")')
我知道row
的属性必须是JSON数组才能匹配id,但是已经设置为JSON对象
JSON_CONTAINS() 的用法接受 JSON 文档作为其第二个参数,而不是路径。
您可以使用该路径将 ID 提取到数组中:
SELECT JSON_EXTRACT(json, '$.row.*.ID') FROM ...
+--------------------------------------------------------------------------------------+
| ["110555175667", "11023235667", "11001414141667", "11023235667", "1100012222225667"] |
+--------------------------------------------------------------------------------------+
使用它,您可以搜索结果数组:
SELECT ... FROM mytable
WHERE JSON_SEARCH(JSON_EXTRACT(json, '$.row.*.ID'), 'one', '11023235667') IS NOT NULL;
您需要在 Laravel 中使用 whereRaw()
来执行此操作,因为 Laravel 没有此表达式的内置查询构建器函数。
提示:一旦您在 SQL 查询的 WHERE
子句中引用了 JSON 列,您的查询就会变得更难编写,更难优化。这应该是一个红旗,表明您的设计是错误的。您最好将数据存储在正常的行和列中,而不是 JSON.
我正在尝试使用 json 搜索包含 laravel 方法的数据库。这是我的 JSON 一个数据库行:
{
"row": {
"1": {
"ID":"110555175667"
},
"2": {
"ID":"11023235667"
},
"3": {
"ID":"11001414141667"
},
"4": {
"ID":"11023235667"
},
"5": {
"ID":"1100012222225667"
},
}
}
我想搜索 ID,但是如您所见,有数字作为属性。
在示例中我想找到 11023235667
。我已经试过了:
->whereJsonContains('json', [['row' => ['1' => ['ID' => '11023235667']]]])
但是没有用。我该怎么做?
编辑:
我也试过这个:
->whereRaw('JSON_CONTAINS(json, "$.row.*.ID", "11023235667")')
我知道row
的属性必须是JSON数组才能匹配id,但是已经设置为JSON对象
JSON_CONTAINS() 的用法接受 JSON 文档作为其第二个参数,而不是路径。
您可以使用该路径将 ID 提取到数组中:
SELECT JSON_EXTRACT(json, '$.row.*.ID') FROM ...
+--------------------------------------------------------------------------------------+
| ["110555175667", "11023235667", "11001414141667", "11023235667", "1100012222225667"] |
+--------------------------------------------------------------------------------------+
使用它,您可以搜索结果数组:
SELECT ... FROM mytable
WHERE JSON_SEARCH(JSON_EXTRACT(json, '$.row.*.ID'), 'one', '11023235667') IS NOT NULL;
您需要在 Laravel 中使用 whereRaw()
来执行此操作,因为 Laravel 没有此表达式的内置查询构建器函数。
提示:一旦您在 SQL 查询的 WHERE
子句中引用了 JSON 列,您的查询就会变得更难编写,更难优化。这应该是一个红旗,表明您的设计是错误的。您最好将数据存储在正常的行和列中,而不是 JSON.