yii 2.0 activerecord:深入研究對象相關映射
> YII 2.0的ActivereCord提供了強大的對象凝聚映射(ORM)接口,從而簡化了數據庫交互。 這種方法在Rails上的Laravel和Ruby等框架中常見,提供了大規模分配,驗證和基於場景的行為等功能。 讓我們探索它的功能和高級功能。
核心功能(從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']); } }
>交界表定義了與getTags()
>的多一對關係。 Tags
Articlestags
> yii 2.0 ActivereCord通過幾個高級功能增強了基礎功能:
骯髒屬性:
和的跟踪更改對模型屬性的更改。 這對於有效更新數據庫記錄是無價的。 >
getDirtyAttributes()
isAttributeChanged()
通過markAttributeDirty()
>特徵繼承,將模型轉換為數組。 >和允許自定義數組的內容,包括計算的字段。 例如,添加一個逗號分隔的標籤字符串:toArray()
>
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 ActivereCord提供了功能強大且靈活的ORM,可以顯著簡化數據庫交互。 高級功能,包括骯髒的屬性,事件,行為和交易操作,增強其功能和對複雜場景的適應性。 這種詳細的探索突出了它的優勢,並演示瞭如何利用其全部潛力。
以上是yii 2.0 Activerecord解釋了的詳細內容。更多資訊請關注PHP中文網其他相關文章!