删除雄辩的关系

问题描述

我有三个表,OrderOrderItemGoldSilverOrderItemorder_id表中的Order,而OrderItemgold_silver_id。 因此,删除Order后,我要删除相关的OrderItemGoldSilver。我可以通过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();
 }

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...