正在删除 eloquent 关系 laravel

Deleting eloquent relationship laravel

我有三个 table,OrderOrderItemGoldSilverOrderItemOrder table 的 order_idOrderItemgold_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 并在删除方法中执行它。这使您不必在控制器中执行额外的删除操作,并确保在删除订单项时始终删除 goldSilver 关系,而无需重复操作。

public function deleting(OrderItem $orderItem){
    $orderItem->goldSilver()->delete();
 }