【问题标题】:Deleting eloquent relationship laravel删除雄辩的关系laravel
【发布时间】:2020-12-14 02:59:28
【问题描述】:

我有三张桌子,OrderOrderItemGoldSilverOrderItem 具有来自 Order 表的 order_idOrderItem 具有 gold_silver_id。 所以,在删除Order 时,我想删除相关的OrderItemGoldSilver。我可以通过 Laravel Eloquent 关系删除 OrderItem,但是如何删除 GoldSilver。
这是我的模型: 订单.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);
    }
}

我该怎么做?帮助表示赞赏。谢谢。

【问题讨论】:

  • 创建一个新的迁移并在其中定义外键约束,您不需要执行额外的代码来从其他表中删除项目。
  • 我不想在删除时使用级联@NaveedAli
  • 你必须遍历 orderItem 关系
  • 简单的方法:你有 $order ,然后 $order_item = $order->orderItem;然后 loof 订单项和 delete$order_item->goldSilver()->delete();然后删除orderItem $order->orderItem()->delete;
  • 你需要在这里添加静态功能启动[检查这个](stackoverflow.com/questions/14174070/…)

标签: laravel eloquent model relation eloquent-relationship


【解决方案1】:

你可以在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);
    }
}

【讨论】:

    【解决方案2】:

    如果您想在删除订单项时删除goldSiver 关系,您可以为订单项设置observer 并在删除方法中执行。这可以防止您在控制器中执行额外的删除操作,并确保在删除订单项目时始终删除 goldSilver 关系,而不必重复自己。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-22
      • 2013-09-26
      • 2015-03-14
      • 2018-11-28
      • 2015-01-11
      • 2021-06-03
      • 2020-03-26
      相关资源
      最近更新 更多