Jaz*_*zzy 9 php laravel eloquent
我想保存order有order_items,但我没有真正找到在文档的任何支持这种使用情况.一个hasMany关系.
基本上有一张orders桌子id | user_id和一张order_items桌子id | order_id | product_id.
如何同时save()订购和使用一系列商品而无需循环遍历商品并单独保存?
这可能吗?
伪代码假设$items是一个数组:
$items = Session::get("cart.items");
$order = new Order;
$order->user_id = Auth::user()->id;
$order->order_items = $items;
$order->save();
Run Code Online (Sandbox Code Playgroud)
Jar*_*zyk 10
hasMany关系所需要的是saveMany或者createMany,取决于$items数组中的内容:
// array of attributes:
$items = [
['name'=>'item1','price'=>'price1'],
...
];
// then createMany:
$order->orderItems()->createMany($items);
Run Code Online (Sandbox Code Playgroud)
这将在Items表中创建新行.
// array of models:
$items = [
Item::find($someId),
Item::find($anotherId),
// and/or newly instantiated:
new Item(['name'=>'item1','price'=>'price1']),
...
];
// then createMany:
$order->orderItems()->saveMany($items);
Run Code Online (Sandbox Code Playgroud)
这将关联(保存)现有模型,并创建不存在的模型.
还要注意我使用camelCase关系名orderItems而不是你的order_items.这是一个重要的细节,因为Eloquent(Laravel v4)在处理关系(动态属性)时会在模型上查找camelCased方法.
//Order model
public function orderItems()
{
return $this->hasMany(...);
}
$order->orderItems; // collection
$order->order_items; // collection as well
// --------------------
// BUT
public function order_items()
{
return $this->hasMany(...);
}
$order->orderItems; // null
$order->order_items; // null
// the only way you can work with relation then, is explicitly use method like:
$order->order_items()->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9258 次 |
| 最近记录: |