gpt4 book ai didi

php - 使用 laravel builder 进行 JSON 列查询

转载 作者:行者123 更新时间:2023-12-05 05:51:48 25 4
gpt4 key购买 nike

我在 mysql 中有一个 json 列,我正在尝试使用 laravel bulider 查询该列。该列有一个 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]]);

关于php - 使用 laravel builder 进行 JSON 列查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70324385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com