我的表结构如下:
创建包条目时,我想做类似的事情:
$shipment = $order->shipments()->create($request->all());
$package = $shipment->packages()->create();
如果我在$货件上转储,它上面有所有正确的ID,我原本希望这种关系可以创建。但是,如果没有order_id(订单表中的id)
的值,则创建包失败我是否误解了雄辩应该如何在这里工作?
编辑:
订单
Schema::create('orders', function (Blueprint $table) {
$table->uuid('id');
$table->uuid('company_id');
$table->uuid('order_address_id');
$table->integer('user_id');
$table->string('unique_id');
$table->string('order_ref')->default('');
$table->string('status');
$table->boolean('hold_or_cancel')->default(0);
$table->string('shipping_method');
$table->dateTime('completed_at')->nullable();
$table->timestamps();
$table->unique(array('company_id', 'unique_id'));
装运
Schema::create('shipments', function (Blueprint $table) {
$table->uuid('id');
$table->uuid('order_id');
$table->uuid('company_id');
$table->string('status')->default('new');
$table->string('shipment_type');
$table->string('shipping_method')->default('');
$table->string('reference')->default('');
$table->timestamps();
});
包
Schema::create('shipment_packages', function (Blueprint $table) {
$table->uuid('id');
$table->uuid('order_id');
$table->uuid('company_id');
$table->uuid('shipment_id');
$table->string('tracking_number')->default('');
$table->integer('package_weight_g')->nullable();
$table->integer('package_length_cm')->nullable();
$table->integer('package_width_cm')->nullable();
$table->integer('package_height_cm')->nullable();
$table->timestamps();
});
要创建订单,我使用以下工作正常。
$address = OrderAddress::create($data);
$order = $address->order()->create($data);
要创建我尝试使用的货件和包裹:
DB::transaction(function () use ($order, $request) {
$shipment = $order->shipments()->create($request->all());
$package = $shipment->shipmentPackages()->create();
});
但是我无法使用这种方法来通过公司或订单ID,我想这样做是为了轻松查看属于订单或公司的货件和包裹清单,即货物属于订单和公司。对于装运包,这属于装运,订单和公司。
经过反思,也许我试图将每张桌子与太多东西联系起来。我的理由是"如果我想找出公司发货的所有包装,那么我应该在package表中包含company_id"。但是,也许最好只看一下公司拥有哪些货物并从那里开始运送包裹。
答案 0 :(得分:0)
看起来你的关系错了,order_id应该在货运表中,所以它与订单上的id有关。