如何解决UpdateOrCreate无法使用数组字段
这是我在使用UpdateOrCreate和Array时遇到的问题,这是我的控制器,这里的extra_id是数组字段
// log4js.json
{
"appenders": {
"cloudWatch": {
"type": "console","layout": {
"type": "basic"
}
}
},"categories": {
"default": {
"appenders": [
"cloudWatch"
],"level": "debug"
}
}
}
在这里,我已经使用Casts将字符串转换为数组,因为我已经在模型中做到了这一点,
$cart = Cart::updateOrCreate([
'user_id'=> $user_id,'product_id'=>$id,'attribute_id'=>$request->attribute_id,'extra_id' => $request->extra_id,],['qty'=>DB::raw('qty + 1')]
);
}
如果extra_id = [1,2],则出现问题,如果出现相同的数据,则会再次创建新记录,而不是更新数量。
解决方法
updateOrCreate
方法不支持使用分配给属性的数组进行查询。它不会对json字段执行whereIn
或特别是whereJsonContains
的操作。它将始终采用数组的第一个元素,并分配给where
条件。
同样,在您的情况下,产生的查询也将始终将数组的第一个元素分配给extra_id
列。
我建议手动检查对象是否存在,然后分别处理更新和创建。
$cart = Cart::where(['user_id'=> $user_id,'product_id'=>$id,'attribute_id'=>$request->attribute_id,])
->whereJsonContains('extra_id',$request->extra_id)
->first();
if( $cart ) //will be empty if no result
$cart->update([
'qty' => DB::raw('qty + 1')
]);
else
$cart = Cart::create(['user_id'=> $user_id,'extra_id' => $request->extra_id,'qty' => 1
]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。