首先,我有一个 $cart 返回一个集合。例子:Collection {#391 ▼ #items: array:2 [▼ "027c91341fd5cf4d2579b49c4b6a90da" => CartItem {#393 ▼ +rowId: "027c91341fd5cf4d2579b49c4b6a90da" +id: "1" +qty: 3 +name: "item 1" +price: 9.99 +options: CartItemOptions {#392 ▶} -associatedModel: null -taxRate: 21 } "370d08585360f5c568b18d1f2e4ca1df" => CartItem {#394 ▶} ]}我正在使用 id 来匹配项目$cart = \Cart::content()->pluck('id', 'qty');$items = Item::whereIn('id', $cart)->get();然后将项目附加到订单$order->items()->attach($items, [ 'qty' => ???]);附加时我如何还包括数量?项目按预期附加,但也需要数量。
1 回答
BIG阳
TA贡献1859条经验 获得超6个赞
您可以通过将字典传递给该attach方法来实现此目的:
$order->items()->attach(
Cart::contents()->mapWithKeys(function ($item) {
return [
$item->id => ['qty' => $item->qty]
];
})->all()
);
原来的答案说你不能用这个attach方法来做到这一点。这显然是错误的。
我将原始答案留在这里,因为代码在技术上仍然是正确的。
Eloquent 的attach方法不允许为每个附加记录添加不同的额外属性。
您必须直接附加每条记录,或者insert自己手动附加数据透视表中的记录。
下面是一些帮助您入门的代码:
$order->items()->newPivotStatement()->insert(
Cart::content()->map(function ($item) use ($order) {
return [
'order_id' => $order->id,
'item_id' => $item->id,
'qty' => $item->qty,
];
})->all()
);
使其适应您的需求。
- 1 回答
- 0 关注
- 281 浏览
添加回答
举报
0/150
提交
取消