在 json 子句的 where 中查找值
Posted
技术标签:
【中文标题】在 json 子句的 where 中查找值【英文标题】:Find the value in where in json clause 【发布时间】:2020-09-18 05:43:33 【问题描述】:我有coupons
表,其中我有rules
列这是json
rules:"\"books\":[1,2,3,4,5]"
我有book
表与优惠券表无关
我还 CartVue.vue
文件,我将书籍存储在购物车中。
现在我想要一个名为getCouponArrtibute()
的属性,它将返回优惠券
其中$coupon->rules->books
具有来自购物车的特定图书 ID。
到目前为止,我已经做到了
public function getCouponAttribute()
$discount = Coupon::whereJsonContains('rules->books', $this->id)->get();
return $discount;
从Cartvue.vue
开始,我现在可以访问优惠券属性,但每次无论图书 ID 是否在 coupon->rules->books
中,它都会返回 null 或空数组
【问题讨论】:
dd($discount->rules); 是做什么的回归? @mrhn 它返回这个 ""type":"percentage","discountPercent":"10","apply":1,"books":[1,2,3,4, 5],"categories":null,"selectedRequirement":1,"requirementValue":null,"selectedLimit":null,"usageLimitValue":null,"selectedEligibility":1" 【参考方案1】:现在 Eloquent 认为 $discount->rules
是 string
。您需要将其转换为对象,这是通过使用 Eloquent Model $casts
property 来完成的。这是通过在 Courpon.php
model
上添加 casts 属性来完成的。
class Coupon
protected $casts = [
'rules' => 'object',
];
这应该使访问$coupon->rules->books
工作。
【讨论】:
那么它将变成一个数组,你不能做对象访问,你应该做 $coupon['rules']['books']以上是关于在 json 子句的 where 中查找值的主要内容,如果未能解决你的问题,请参考以下文章
TypeORM查找where子句,如何在多个参数中添加where
在 where 子句 laravel 中使用 Json 属性
postgresql 在 where 子句中使用 json 子元素
在 sequelize where 子句中使用 ILIKE(JSON 列)