yii 2.0 activerecord:オブジェクトリレーショナルマッピング
に深く潜りますYII 2.0のActiverCordは、データベースの相互作用を簡素化して、堅牢なオブジェクトリレーショナルマッピング(ORM)インターフェイスを提供します。 LaravelやRuby on Railsなどのフレームワークで一般的なこのアプローチは、マス割り当て、検証、シナリオベースの動作などの機能を提供します。 その機能と高度な機能を調べてみましょう。
コア機能(yiibasemodelから継承):
属性:モデルデータは、公開可能な属性に保存されます。マス割り当ては、アレイをattributes
プロパティに割り当てることにより促進され、__set()
から継承されたメソッドをレバレッジします。 属性検索は同様にsetAttributes()
およびyiibaseComponent
を使用します。 ユーザーインターフェイスにとって重要な属性ラベルは、表示目的で定義されています。
__get()
getAttributes()
シナリオ:rules()
シナリオでは、コンテキスト(登録対ログインなど)に応じて、異なる検証とデータ処理ルールを定義することができます。これにより、柔軟性と保守性が向上します
ActivereCordモデルの作成:
この例では、単純なブログ構造を使用しています(上の画像を参照)。 GIIを使用して生成されたメソッドの追加に注意してください。これは、ジャンクションテーブルを介して
との多くの関係を定義しています。Articles
高度な使用法:
namespace app\models; use Yii; class Articles extends \yii\db\ActiveRecord { // ... (tableName(), rules(), attributeLabels() as shown in the original text) ... public function getAuthors() { return $this->hasOne(Authors::className(), ['ID' => 'AuthorsID']); } public function getArticlestags() { return $this->hasMany(Articlestags::className(), ['ArticlesID' => 'ID']); } public function getTags() { return $this->hasMany(Tags::className(), ['ID' => 'TagsID']) ->viaTable(Articlestags::tableName(), ['ArticlesID' => 'ID']); } }
yii 2.0 Activerecordは、いくつかの高度な機能で基本機能を強化します:getTags()
Tags
Articlestags
ダーティ属性:、、
、およびを使用してモデル属性への変更を追跡します。 これは、データベースレコードを効率的に更新するために非常に貴重です
配列可能:特性を介して継承されたメソッドは、モデルを配列に変換します。 getDirtyAttributes()
およびisAttributeChanged()
計算されたフィールドを含む配列のコンテンツをカスタマイズすることを許可します。 たとえば、タグのカンマ分離された文字列を追加:markAttributeDirty()
namespace app\models; use Yii; class Articles extends \yii\db\ActiveRecord { // ... (tableName(), rules(), attributeLabels() as shown in the original text) ... public function getAuthors() { return $this->hasOne(Authors::className(), ['ID' => 'AuthorsID']); } public function getArticlestags() { return $this->hasMany(Articlestags::className(), ['ArticlesID' => 'ID']); } public function getTags() { return $this->hasMany(Tags::className(), ['ID' => 'TagsID']) ->viaTable(Articlestags::tableName(), ['ArticlesID' => 'ID']); } }
beforeValidate()
、afterSave()
)。 これらは、コアモデルコードを変更せずにカスタマイズ動作を可能にします。 たとえば、自動的にLastEdited
:public function extraFields() { return [ 'tagsString' => function () { return implode(', ', array_map(function ($tag) { return $tag->Tag; }, $this->tags)); }, ]; }
BlameableBehavior
(追跡クリエーター/アップデーター)やTimestampBehavior
(自動タイムスタンプ)などの組み込みの動作を提供します。 これらの動作の添付:public function beforeValidate() { $this->LastEdited = new \yii\db\Expression('NOW()'); return parent::beforeValidate(); }
transactions()
YII 2.0 ActiverCordは、データベースの相互作用を大幅に簡素化する強力で柔軟なORMを提供します。 汚い属性、イベント、動作、トランザクション運用などの高度な機能は、その能力と複雑なシナリオへの適応性を高めます。 この詳細な調査は、その強みを強調し、その潜在能力を最大限に活用する方法を示しています。
以上がYii 2.0 ActivereCordは説明しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。