Yii2の最小PHPバージョンは5.4です。 Traitsの最小PHPバージョンは5.4です。 偶然? そうは思いません!

Yii2はこれらの悪い振る舞いを取り除く時が来ました。 そして、ここに理由があります。
PHP Traitsを使用したActiveRecordの
SoftDelete動作の実装例を
見てみましょう。 そして、これが私たちに与えるポイントを考慮してください。
より優れたモデル制御明らかに、レコードを「削除済み」としてマークすると、クエリの結果に取り込まれないことが期待されます。Cat
:: find()-> all() 、
Cat :: find()-> one() 、など Yii1では、このような機能を
CActiveRecord :: beforeFind()イベントに実装できました。 ただし、Yii2でActiveRecordを完全に処理した後、明らかな理由により、このイベントはもう存在せず、タスクは解決できないもののカテゴリに入ります。 ビヘイビアはARイベントでのみ機能します。 対照的に、特性を使用する場合、次のように、任意のモデルメソッドを自由にオーバーライドできます。
public static function find() { $query = parent::find();
IDEの完全サポートはい、ビヘイビアを使用すると、モデルに新しい属性を追加できますが、IDEはこれについて何も知らず、オートコンプリートについても話しません。 しかし、特性を使用する場合、IDEは仮想メソッドを含むすべての新しいメソッドとプロパティを完全に選択します。
* @property-read bool $isDeleted */ trait SoftDelete
そして今、特性SoftDeleteが接続されているすべてのARオブジェクトで
isDeletedプロパティが強調表示されます。
class Cat extends ActiveRecord { use \common\traits\SoftDelete; } $cat = (new Cat)->isDeleted;
マイナスワンバイク特性の出現により、行動は実際に自転車になりました。 そして、
良心的な開発者は非常に苦しむリスクを負い、特性のこの代用品を研究するのに多くの時間を費やし、上記の問題を解決しようとします。 これはYii1では非常に優れたソリューションでしたが、今ではフレームワークを学習して使用する際にフラットな場所でオーバーヘッドになります。 彼らに別れを告げる時です。