Laravel は、Web アプリケーション開発プロセスを簡素化する多くの強力な機能とツールを提供する人気のある PHP Web アプリケーション フレームワークです。中でもLaravelのソフト削除機能は非常に便利な機能で、データベースからレコードをすぐに削除するのではなく、レコードを削除済みとしてマークすることで、データの整合性を保ちながら特殊なニーズを実現できます。
しかし、多くの Laravel 開発者が遭遇したであろう疑問は、論理的に削除されたデータは引き続き読み取ることができるかということです。この記事では、この問題とその解決策について説明します。
まず、Laravel のソフト削除の原理を理解する必要があります。論理的な削除は、deleted_at フィールドをデータ テーブルに追加することによって実装されます。論理的な削除を使用する場合、レコードが削除されると、Laravel はレコードを削除するのではなく、レコードの delete_at フィールドを空ではない値に設定するだけで、「論理的な削除」の効果が得られます。データをクエリするとき、Laravelは空ではないdeleted_atフィールドを持つレコードを自動的に除外し、「論理的に削除」されていないレコードのみをクエリする効果を実現します。
したがって、論理的に削除されたレコードがデータベースにまだ存在する場合でも、論理的に削除されたデータは引き続き読み出すことができます。ただし、デフォルトでは、Laravel の論理的な削除は、「論理的に削除された」とマークされたレコードのみを自動的にフィルターします。論理的に削除されたレコードと削除されていないレコードの両方をクエリする必要がある場合は、手動で withTrashed メソッドをクエリに追加する必要があります。
withTrashed メソッドは論理的に削除されたレコードを返しますが、論理的に削除されていないレコードのクエリには引き続き通常のメソッドが使用されます:
// 查询未被软删除的记录 $users = DB::table('users')->whereNull('deleted_at')->get(); // 查询被软删除的记录 $trashedUsers = DB::table('users')->whereNotNull('deleted_at')->get(); // 同时查询未被软删除和被软删除的记录 $usersWithTrashed = DB::table('users')->withTrashed()->get();
上の例では、whereNull メソッドと whereNotNull メソッドを使用してクエリを実行しました。削除されていないレコード。削除されたレコードと削除されたレコード、および withTrashed メソッドは、論理的に削除されたレコードのクエリにも使用されます。
withTrashed メソッドに加えて、Laravel には他にも 2 つのメソッドがあります。onlyTrashed と復元です。これらは、論理的に削除されたレコードをクエリし、論理的に削除されたレコードを復元するために使用されます。その使用法は次のとおりです:
// 查询被软删除的记录 $trashedUsers = DB::table('users')->onlyTrashed()->get(); // 恢复软删除的记录 DB::table('users')->where('id', $id)->restore();
要約すると、Laravel で論理的に削除されたデータは引き続き読み出すことができますが、デフォルトでは論理的に削除されていないレコードのみがクエリされます。論理的に削除されたレコードと削除が取り消されたレコードを同時にクエリする必要がある場合は、withTrashed メソッドを手動で追加する必要があります。さらに、onlyTrashed メソッドを使用して論理的に削除されたレコードをクエリしたり、restore メソッドを使用して論理的に削除されたレコードを復元したりすることもできます。これらの方法をマスターすることで、開発者はLaravelのソフト削除機能をより適切に適用し、開発効率を向上させることができます。
以上がLaravel で論理的に削除されたデータがどのように引き続き読み取れるかについての簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。