首頁 > 後端開發 > php教程 > yii 2.0 Activerecord解釋了

yii 2.0 Activerecord解釋了

Christopher Nolan
發布: 2025-02-19 12:22:09
原創
997 人瀏覽過

yii 2.0 activerecord:深入研究對象相關映射

> YII 2.0的ActivereCord提供了強大的對象凝聚映射(ORM)接口,從而簡化了數據庫交互。 這種方法在Rails上的Laravel和Ruby等框架中常見,提供了大規模分配,驗證和基於場景的行為等功能。 讓我們探索它的功能和高級功能。

Yii 2.0 ActiveRecord Explained

核心功能(從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']);
    }
}
登入後複製
登入後複製
  • >事件: ActiverEcord在其生命週期的各個階段觸發事件(例如,beforeValidate()afterSave())。 這些允許自定義行為而無需修改核心模型代碼。 例如,自動更新LastEdited
public function extraFields()
{
    return [
        'tagsString' => function () {
            return implode(', ', array_map(function ($tag) { return $tag->Tag; }, $this->tags));
        },
    ];
}
登入後複製
  • 行為:行為在不修改其代碼的情況下添加功能。 YII提供了內置的行為,例如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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板