Webアプリケーションを開発する際には、通常、データの追加、削除、変更、確認が必要ですが、データの削除は非常に重要な作業の一つです。ただし、実際のプロジェクトでは、削除されたデータを回復する必要があることがよくあるため、従来の物理的な削除操作は不便です。
この問題に対応して、ThinkPHP フレームワークは、削除操作をマークされた削除操作に変換するソフト削除機能を提供します。この方法では、削除されたデータは実際にはデータベースから消えるのではなく、データ テーブルに追加される削除のステータスを示すフィールドで、必要に応じて復元できます。
次に、ThinkPHP フレームワークのソフト削除関連の実装を見てみましょう。
1. 論理的削除の実装方法
論理的削除が必要なテーブルに追加します削除ステータスを示すフィールド (例:
ALTER TABLE `table_name` ADD `delete_time` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT '删除时间';
delete_time フィールドは、削除操作の時間を記録するために使用されます。このフィールドが空でない場合は、データが削除されたことを意味します)。
モデル ファイルで、論理的な削除のパラメータを設定する必要があります。これにより、削除操作を実行するときに、このパラメータは自動的に更新されます。例:
namespace app\common\model; use think\Model; use traits\model\SoftDelete; class User extends Model { use SoftDelete; protected $deleteTime = 'delete_time'; // 表示删除时间的字段名称 protected $defaultSoftDelete = 0; // 表示未删除状态的值 }
このうち、$deleteTime 変数は削除時刻のフィールド名を表し、$defaultSoftDelete 変数は削除されていないステータスの値を表します。このパラメータが設定されていない場合、デフォルトは 0 になります。
ソフト削除が必要な場合は、モデル クラスが提供する delete メソッドを使用して削除操作を実行できます。例:
$user = User::get($id); // 根据id获取用户实体 $user->delete(); // 执行软删除
論理的な削除操作が実行されると、delete_time フィールドが現在のタイムスタンプに更新され、データが削除されたことが示されます。
論理的に削除されたデータをクエリする必要がある場合は、withTrashed メソッドを使用してクエリを実行できます。例:
// 查询所有的用户数据(包含已经软删除的数据) $userList = User::withTrashed()->select(); foreach ($userList as $user) { if ($user->delete_time) { // 判断是否已经被软删除 // 如果已经被软删除,则进行相应的处理 } else { // 如果未被软删除,则进行相应的处理 } }
withTrashed メソッドを通じて、論理的に削除されていないデータと論理的に削除されたデータを含むすべてのユーザー データを取得できます。
論理的に削除されたデータを復元する必要がある場合は、モデル クラスによって提供される復元メソッドを使用して復元操作を実行できます。例:
$user = User::onlyTrashed()->where('id', $id)->find(); // 根据id获取已经被软删除的用户实体 $user->restore(); // 执行数据恢复
論理的に削除されたデータ回復操作が実行されると、対応する delete_time フィールドの値がクリアされ、データが回復されたことが示されます。
2. 概要
論理的な削除操作を通じて、データの整合性を維持しながらデータを削除し、必要に応じて削除されたデータを復元できます。 ThinkPHP フレームワークでは、ソフト削除の実装は非常に簡単です。データベースに対応するフィールドを追加し、モデル クラスのソフト削除パラメータを設定するだけです。ソフト削除機能の利便性を享受し、開発効率を向上させることができます。 、開発時間を節約します。
以上がThinkPHPフレームワークにおけるソフトデリートの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。