使用 loadMissing () 方法时发现的一个 bug
最近在写一个退货退款功能,当退货退款成功时,调用以下方法修改子订单和主订单状态。
public function changeOrderStatus($refundOrder)
{
$refundOrder->loadMissing(['subOrder' => function ($q) {
$q->select(['id', 'order_status'])->where('order_status', '<', 4);
}]);
if ($subOrder = $refundOrder->subOrder) { // 退货退款单所属可退货退款子订单
$subOrder->order_status = 4;
$subOrder->save();
}
// 修改主订单状态代码略
}
由于退货处理和退款处理的代码略有不同,使得其中一个传入的$refundOrder有预加载子订单,另一个没有预加载,故使用loadMissing()方法。
结果报错了。
{"message": "array_key_exists(): The first argument should be either a string or an integer"}
应该是
loadMissing
不支持 数组+function 这样的写法。@di-gua subOrder字段比较多,故只取出主键和订单状态。但with()和load()方法又不支持
的写法。
会报关联不存在的错,如果使用[关联=>闭包]键值对,必须要把select的字段写在闭包里。
是的,只能写闭包里面了