2017-05-07 66 views
2

有沒有辦法檢索laravel 5.4中與軟刪除用戶相關的帖子?我想,因爲用戶仍然在數據庫中應該有辦法。在laravel 5.4中檢索軟刪除的用戶帖子

+1

通常通過在該記錄上設置布爾標誌「已刪除」爲true來完成「軟刪除」。查詢跳過了「刪除」純粹的用戶端列表。但正如你所說,他們仍然在那裏直接鏈接或爲現有職位取名。我對laravel 5.4沒有經驗,但是沒有辦法沒有技術上的理由。 Override或Default值都可以輕鬆完成此操作。將更多的打賭覆蓋(數據庫查詢性能的原因)。 – Christopher

+0

軟刪除用戶a)將用戶留在數據庫中(去看看)和b)對其關係沒有做任何事情(除非你編碼自己的邏輯去做)。你有沒有試圖以任何方式訪問這些帖子?你使用什麼代碼? – ceejayoz

+0

肯定,但由於某種原因,當我用柔軟的後沿刪除用戶失敗每次公共職能破壞($ ID) {$ 管理員=用戶:: findOrFail($ ID); $ admins - > project() - > delete(); $ admins-> project() - > delete(); return redirect() - > back(); }這是使用和已經建立的關係和其他一切的銷燬方法 – user3089096

回答

4

當您軟刪除一條記錄時,它會在數據庫中刪除flagged,但該記錄仍然存在。

,您仍然可以檢索它是這樣的:

$users = App\User::withTrashed()->get(); 
-1

這應該工作,我想。

Post::whereHas('users', function ($q) { 
    $q->whereNotNull($q->getModel()->getQualifiedDeletedAtColumn()); 
})->get(); 

這是一個where子句基本上添加到加入表deleted_at列是not null。或者,這也可能是單線的。

User::with('posts')->onlyTrashed()->get()->map->posts->collapse(); 

onlyTrashed是如所描述的在here性狀SoftDeletes定義的方法。在onlyTrashed旁邊有更多'範圍擴展',它們是restore,withTrashed,withoutTrashed

我不知道,但我認爲在collapse之後加入->unique('id')也不錯。

+0

這是waaaaaay過於複雜的事情,當OP只需'用戶:: withTrashed() - > whereId($ ID) - >第一();' – ceejayoz

+0

@ceejayoz OP的問題:有沒有什麼辦法來檢索** **職位是與一個軟刪除**用戶相關**。關係。 – Chay22

+0

好吧,但現在當我嘗試刪除用戶和發佈它只是刪除用戶,而不是帖子。公共職能銷燬($ id) { $ admins = User :: findOrFail($ id); $ admins - > delete(); $ admins-> project() - > delete(); return redirect() - > back(); },這是laracasts上使用的代碼。由於某種原因,它沒有得到相關的使用的職位,但只是獲取用戶,並刪除it.this是它顯示FatalThrowableError在HomeController.php行70錯誤: 調用一個成員函數上的空 – user3089096

0

我不想恢復已刪除的帖子,並保留自己的用戶刪除原因,這將返回一個斷開的關係。

,但如果你想恢復它,知道刪除用戶的id,你可以這樣恢復:同樣

Post::onlyTrashed()->where('user_id', $id)->restore(); 

,我建議不這樣做。