JSON 列查询使用 laravel 生成器
JSON column query using laravel builder
我在 mysql 中有一个 json 列,我正在尝试使用 laravel 构建器查询该列。该列有一个 json 对象数组,我想查询该 json 对象中的值属性。
use Illuminate\Database\Eloquent\Builder;
class SizeFilter
{
public function filter(Builder $builder, $value): Builder{
return $builder->whereJsonContains('sizes',[['Value' => $value]]);
}
我的 json 列结构是
[{"SizeID":34,"Sku":null,"Value":"10","stock":2},{"SizeID":35,"Sku":null,"Value":"12","stock":0},{"SizeID":36,"Sku":null,"Value":"14","stock":0},{"SizeID":37,"Sku":null,"Value":"16","stock":0},{"SizeID":38,"Sku":null,"Value":"18","stock":0},{"SizeID":32,"Sku":null,"Value":"6","stock":0},{"SizeID":33,"Sku":null,"Value":"8","stock":1}]
什么是$value
?它必须是一个字符串。如果是整数,JSON 搜索将不起作用。
我没有Laravel,但我在MySQL客户端测试过:
mysql> set @j = '...'; -- your example JSON
mysql> select json_contains(@j, '{"Value":"10"}');
+-------------------------------------+
| json_contains(@j, '{"Value":"10"}') |
+-------------------------------------+
| 1 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> select json_contains(@j, '{"Value":10}');
+-----------------------------------+
| json_contains(@j, '{"Value":10}') |
+-----------------------------------+
| 0 |
+-----------------------------------+
所以确保它是一个字符串:
return $builder->whereJsonContains('sizes',[['Value' => (string) $value]]);
我在 mysql 中有一个 json 列,我正在尝试使用 laravel 构建器查询该列。该列有一个 json 对象数组,我想查询该 json 对象中的值属性。
use Illuminate\Database\Eloquent\Builder;
class SizeFilter
{
public function filter(Builder $builder, $value): Builder{
return $builder->whereJsonContains('sizes',[['Value' => $value]]);
}
我的 json 列结构是
[{"SizeID":34,"Sku":null,"Value":"10","stock":2},{"SizeID":35,"Sku":null,"Value":"12","stock":0},{"SizeID":36,"Sku":null,"Value":"14","stock":0},{"SizeID":37,"Sku":null,"Value":"16","stock":0},{"SizeID":38,"Sku":null,"Value":"18","stock":0},{"SizeID":32,"Sku":null,"Value":"6","stock":0},{"SizeID":33,"Sku":null,"Value":"8","stock":1}]
什么是$value
?它必须是一个字符串。如果是整数,JSON 搜索将不起作用。
我没有Laravel,但我在MySQL客户端测试过:
mysql> set @j = '...'; -- your example JSON
mysql> select json_contains(@j, '{"Value":"10"}');
+-------------------------------------+
| json_contains(@j, '{"Value":"10"}') |
+-------------------------------------+
| 1 |
+-------------------------------------+
1 row in set (0.00 sec)
mysql> select json_contains(@j, '{"Value":10}');
+-----------------------------------+
| json_contains(@j, '{"Value":10}') |
+-----------------------------------+
| 0 |
+-----------------------------------+
所以确保它是一个字符串:
return $builder->whereJsonContains('sizes',[['Value' => (string) $value]]);