问题描述
我有三个表,Order
,OrderItem
和GoldSilver
。 OrderItem
有order_id
表中的Order
,而OrderItem
有gold_silver_id
。
因此,删除Order
后,我要删除相关的OrderItem
和GoldSilver
。我可以通过Laravel Eloquent关系删除OrderItem,但是如何也可以删除GoldSilver。
这是我的模型:
Order.php
public function orderItem()
{
return $this->hasMany(OrderItem::class);
}
OrderItem.php
public function order()
{
return $this->belongsTo(Order::class);
}
public function goldSilver()
{
return $this->belongsTo(GoldSilver::class);
}
GoldSilver.php
public function orderItem()
{
return $this->hasOne(OrderItem::class);
}
在我要删除的控制器中,我正在做
public function destroy($id)
{
$order = Order::find($id);
$order->orderItem;
$dltorder = $order->orderItem()->delete();
if($dltorder){
return response()->json([
'status'=>'Success','message'=>'Order deleted'
],200);
}
}
我该怎么做?感谢帮助。谢谢。
解决方法
您可以在destroy方法中执行以下操作:
public function destroy($id)
{
//you have $order id,find the order and then the relation with orderItems
$order = Order::find($id);
foreach($order->orderItem as $orderItem){
$orderItem->goldSilver()->delete();
}
$dltorder = $order->orderItem()->delete();
if($dltorder){
return response()->json([
'status'=>'Success','message'=>'Order deleted'
],200);
}
}
,
如果您希望在删除订单项时随时删除goldSiver
关系,则可以为订单项设置observer并在Delete方法中执行。这样可以避免您必须在控制器中执行额外的删除操作,并确保在删除订单项时无需重复自己的操作,goldSilver
关系将始终被删除。
public function deleting(OrderItem $orderItem){
$orderItem->goldSilver()->delete();
}