【发布时间】:2018-10-09 20:46:32
【问题描述】:
我有 3 个表格需要在创建订单时填充,我想知道执行此操作的最佳方法。
表格
Orders
- id (pk)
- company_id
- address_id (join to items table)
- date
- source
- ...
Addresses
- id (pk)
- company_id
- name
- email
- address
- ...
Items
- id (pk)
- order_id (join to orders table)
- product_id
- qty
- ...
关系
- 地址表属于订单表
- 订单有很多商品
- 我们有一个多租户(单数据库)结构,因此 company_id 用于分隔公司之间的数据。订单和地址都属于公司。
创作
我的理解是,需要先创建地址才能获取 ID。然后将创建订单,然后是商品。
我还想确保如果任何插入失败,则不会保存任何数据(就像在 SQL 事务中一样)。
我想知道是否有人可以为我指明正确的方向以找到最好的方法?到目前为止,我有以下内容
$address = OrderAddress::create([
'company_id' => Auth::user()->company_id,
'name' => 'test test',
'email' => 'test@test.com',
'address' => '78 test street',
]);
$order = $address->order()->create([
//'address_id' => populated by model
'company_id' => Auth::user()->company_id,
'date' => '2018-03-23',
'source' => 'mystore'
]);
foreach($items as $item){
OrderItem::create([
'order_id' => $order->order_id,
'product_id' => $item->product_id,
'qty' => $item->qty
]);
}
我的主要问题是:
- 这不能用作事务,即失败不会创建回滚。
- 我不确定我是否充分发挥了模型关系的潜力。
【问题讨论】:
-
一个事务绝对应该有效。你是怎么用的?