正在删除 eloquent 关系 laravel
Deleting eloquent relationship laravel
我有三个 table,Order
,OrderItem
和 GoldSilver
。 OrderItem
有 Order
table 的 order_id
,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 并在删除方法中执行它。这使您不必在控制器中执行额外的删除操作,并确保在删除订单项时始终删除 goldSilver
关系,而无需重复操作。
public function deleting(OrderItem $orderItem){
$orderItem->goldSilver()->delete();
}
我有三个 table,Order
,OrderItem
和 GoldSilver
。 OrderItem
有 Order
table 的 order_id
,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 并在删除方法中执行它。这使您不必在控制器中执行额外的删除操作,并确保在删除订单项时始终删除 goldSilver
关系,而无需重复操作。
public function deleting(OrderItem $orderItem){
$orderItem->goldSilver()->delete();
}