Search code examples
laraveleloquentmodelrelationeloquent-relationship

Deleting eloquent relationship laravel


I have three tables, Order, OrderItem and GoldSilver. OrderItem has an order_id from Order table and OrderItem has gold_silver_id. So, Upon deleting Order I want to delete related OrderItem and GoldSilver. I can delete OrderItem through Laravel Eloquent relationship, but how can I delete GoldSilver too.
Here is my model: 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);
}

In my controller for delete I am doing:

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);
    }
}

How can I do so? Helpis appreciated. Thank you.


Solution

  • you can do something like below in destroy method:

    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);
        }
    }