プロジェクト開発では、企業によってデータベース内のデータに対する操作が異なります。たとえば、一部のデータ テーブルではデータ レコードを物理的に削除する必要がありますが、データ テーブル内の一部のレコードは偽削除 (論理的に削除) する必要があります。フレームワークはデータに対してこれら 2 つの操作を実装しました。 では、それを palcon でどのように使用するのでしょうか?
halcon での物理的な削除 $model->delete();
halcon で $model- >delete(); を使用します。デフォルトの実行は物理的な削除であり、ソフトな削除は
palconで使用されるフックとミドルウェアに似た機能があります。動作を追加するための halcon のメソッド:
$this->addBehavior()
use Phalcon\Mvc\Model; use Phalcon\Mvc\Model\Behavior\SoftDelete; class Users extends Model{ const DELETED = "D"; const NOT_DELETED = "N"; public function initialize() { $this->addBehavior( new SoftDelete( [ "field" => "status", // 数据库中的字段 "value" => Users::DELETED, //修改数据库中status的值为D ] ) ); } }このように、$model->delete() メソッドを使用すると、データ テーブルの対応するフィールドが status = 'D' に変更され、ソフト削除機能が実現されますが、これにはどのような問題があるのでしょうか? 上記の 2 つの点を実行する必要があります。誰もが利点を知っています。問題はありませんか? コードを分離するためにトレイルを使用します。 異なるビジネスに応じて、一部のモデルで必要なデータも異なります。次のメソッドを使用します:
namespace xxxx; use Phalcon\Mvc\Model\Behavior\SoftDelete; if (!trait_exists('ModelSoftDeletes')) { trait ModelSoftDeletes{ public function delete(){ $this->addBehavior( new SoftDelete([ "field" => "is_deleted", "value" => self::DELETED ]) ); return parent::delete(); } } }ソフト削除を使用する必要があるモデルで使用します:
class Userodel extend Model { use ModelSoftDeletes; ...... }ModelSoftDeletes の delete メソッドは Model の delete メソッドをオーバーライドし、ソフト削除の実装を追加します。 $model->delete() を呼び出す前の現在のモデル。
以上がPhalcon フレームワークのソフト削除および物理削除ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。