2017-01-26 37 views
0

我有两个表。表reports在Laravel中删除数据透视表中的行

report_id | user_id | item_id 

reports_messages

report_id | user_id | item_id | messages 

我想,当我在reports删除report_idreports_messages匹配report_id所有相关行太删除。

在我ReportMessages型号我有这个关系

public function reports(){ 
    return $this->belongsTo('App\Report'); 
} 

public function item(){ 
    return $this->belongsTo('App\Item', 'item_id', 'id'); 
} 

报告模型

public function reportedItem(){ 

    return $this->belongsTo('App\Item'); 
} 

public function user(){ 
    return $this->hasOne('App\User', 'id', 'user_id'); 
} 

到目前为止,我已经试过这个解决方案在这里建立在SO

public function destroy($report_id){ 

    Report::destroy($report_id); 
    ReportMessages::find(1)->reports()->where('report_id',$report_id)->delete(); 

    return redirect()->route('user.ports'); 

这将删除仅在reports ..不会删除数据透视表中的相关report_id。 }

回答

2

Laravel具有处理数据透视表的功能detach and attach。 所以,你可以做到这一点要删除的记录中的数据透视表:

ReportMessages::find(1)->reports()->detach($report_id); 

然而,这将不会在报告表中删除行,因为它仍然可以被链接到另一个对象。

更新:
所以,我只注意到,你没有透视表,你只有两个被链接的模型。

您不必加载reports()关系在查询中删除ReportMessages,你可以做这样的:

Report::destroy($report_id); 
ReportMessages::where('report_id',$report_id)->delete(); 

这将删除该报告,以及所有相应reportmessages。

+0

谢谢。我有这个错误'调用未定义的方法Illuminate \ Database \ Query \ Builder :: detach()' – user5996816

+0

我更新了我的答案,你实际上没有一个数据透视表... – Jerodev

+0

哦,天啊。我试图用数据透视表来做。它们实际上只与模型相关联。傻我。谢谢您的帮助! – user5996816

相关问题