如何解决删除雄辩的关系
我有三个表,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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。