2017-05-07 13 views
2

laravel 5.4のソフト削除されたユーザーに関連する投稿を取得する方法はありますか?私は考えているので、ユーザーはデータベースにまだ道があるはずです。laravel 5.4のソフト削除されたユーザー投稿を取得します。5.4

+1

通常、「ソフト削除」は、そのレコードでブールフラグ「削除済み」をtrueに設定することによって行われます。 Queriesは純粋なユーザー側のリストのために「削除済み」のものをスキップします。しかし、あなたが言ったように、彼らはまだそこに直接リンクまたは既存の投稿の名前を取得しています。私はlaravel 5.4の経験はありませんが、方法がないという技術的理由はありません。オーバーライド値またはデフォルト値の両方で簡単にこれを達成できます。オーバーライドにもっと賭けるでしょう(DBクエリのパフォーマンス上の理由)。 – Christopher

+0

ユーザーをソフト削除すると、データベースにユーザーが残っていて(b)ルックアップされていて、b)その関係に何もしません。これらの投稿に何らかの方法でアクセスしようとしましたか?どのようなコードを使用していますか? – ceejayoz

+0

はい、何らかの理由で私がソフトを削除すると、その投稿と一緒にユーザーが削除されます。毎回public function destroy($ id)に失敗します。 { $ admins = User :: findOrFail($ id); $ admins - > project() - > delete(); $ admins-> project() - > delete(); return redirect() - > back(); }これはdestroyメソッドです。imを使用していて、既に関係を設定しています。 – user3089096

答えて

4

レコードをソフト削除すると、データベースにはflaggedが削除されますが、レコードはそのまま残ります。

あなたはまだこのようにそれを取得することができます。

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

これは動作するはずです、私は思います。

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

それは基本的にnot nullあるテーブルdeleted_at列に入社するwhere句を追加しています。または、これはおそらく1本1本も動作します。

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

onlyTrashedhereが記載されているようにSoftDeletes形質に定義された方法です。 onlyTrashedの横に「スコープの拡張子」があり、これはrestore,withTrashed,withoutTrashedです。

私はわかりませんが、の後に->unique('id')を追加すると良いと思います。

+0

これは、OPにちょうど 'User :: withTrashed() - > whereId($ id) - > first();'が必要なときに、オーバーアロップされたものです。 – ceejayoz

+0

@ceejayoz OP質問:**投稿**を取り出す方法はありますか?ソフト削除された**ユーザー**に関連しています。関係。 – Chay22

+0

okしかし、今私は両方のユーザーと投稿を削除しようとすると、ユーザーだけでなく、投稿を削除します。パブリック関数destroy($ id) { $ admins =ユーザー:: findOrFail($ id); $ admins - > delete(); $ admins-> project() - > delete(); return redirect() - > back(); }このコードはlaracastで使用されているコードです。何らかの理由で、使用されたポストを取得していないが、ユーザーを取得して削除します。これは、FatalThrowableErrorがHomeController.php行70に表示されるエラーです。 nullのメンバー関数delete()を呼び出す – user3089096

0

私は、削除された投稿を復元して、自分のユーザーを削除したままにすることを好まなかったため、壊れた関係が返されます。

しかし、あなたはそれを復元し、あなたがそのように復元することができ、削除されたユーザーのIDを知りたい場合は:

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

繰り返しますが、私はそれをやっていないにをお勧めします

関連する問題