首先,我有一个$ 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' => ???
]);
附加时还如何包含数量?物品会按预期附着,但也需要数量。
答案 0 :(得分:0)
更新:如by Twitter user AnellyBot所指出,您可以通过将字典传递给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()
);
使其适应您的需求。