2017-01-26 36 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

相關問題