ホームページ >バックエンド開発 >PHPチュートリアル >Yii 2.0 ActivereCordは説明しました

Yii 2.0 ActivereCordは説明しました

Christopher Nolan
Christopher Nolanオリジナル
2025-02-19 12:22:09979ブラウズ

yii 2.0 activerecord:オブジェクトリレーショナルマッピング

に深く潜ります

YII 2.0のActiverCordは、データベースの相互作用を簡素化して、堅牢なオブジェクトリレーショナルマッピング(ORM)インターフェイスを提供します。 LaravelやRuby on Railsなどのフレームワークで一般的なこのアプローチは、マス割り当て、検証、シナリオベースの動作などの機能を提供します。 その機能と高度な機能を調べてみましょう。

Yii 2.0 ActiveRecord Explained

コア機能(yiibasemodelから継承):

  • 属性:モデルデータは、公開可能な属性に保存されます。マス割り当ては、アレイをattributesプロパティに割り当てることにより促進され、__set()から継承されたメソッドをレバレッジします。 属性検索は同様にsetAttributes()およびyiibaseComponentを使用します。 ユーザーインターフェイスにとって重要な属性ラベルは、表示目的で定義されています。 __get() getAttributes()

  • 検証:メソッドは、属性の検証ルールを定義し、データの整合性を確保します。 デフォルトでは、「安全な」属性(定義された検証ルールを持つもの)のみが大量に割り当て可能です。
  • シナリオ:rules()シナリオでは、コンテキスト(登録対ログインなど)に応じて、異なる検証とデータ処理ルールを定義することができます。これにより、柔軟性と保守性が向上します

  • ActivereCordモデルの作成:

    この例では、単純なブログ構造を使用しています(上の画像を参照)。 GIIを使用して生成された
  • モデルは、基本構造を示しています。

メソッドの追加に注意してください。これは、ジャンクションテーブルを介して

との多くの関係を定義しています。

Articles高度な使用法:

<code class="language-php">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']);
    }
}</code>

yii 2.0 Activerecordは、いくつかの高度な機能で基本機能を強化します:getTags() Tags Articlestags

ダーティ属性:

、および

を使用してモデル属性への変更を追跡します。 これは、データベースレコードを効率的に更新するために非常に貴重です

  • 配列可能:特性を介して継承されたメソッドは、モデルを配列に変換します。 getDirtyAttributes()およびisAttributeChanged()計算されたフィールドを含む配列のコンテンツをカスタマイズすることを許可します。 たとえば、タグのカンマ分離された文字列を追加:markAttributeDirty()

<code class="language-php">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']);
    }
}</code>
  • イベント:ActivereCordは、ライフサイクルのさまざまな段階でイベントをトリガーします(例えば、beforeValidate()afterSave())。 これらは、コアモデルコードを変更せずにカスタマイズ動作を可能にします。 たとえば、自動的にLastEdited
  • を更新します
<code class="language-php">public function extraFields()
{
    return [
        'tagsString' => function () {
            return implode(', ', array_map(function ($tag) { return $tag->Tag; }, $this->tags));
        },
    ];
}</code>
  • 動作:動作は、コードを変更せずにモデルに機能を追加します。 YIIは、BlameableBehavior(追跡クリエーター/アップデーター)やTimestampBehavior(自動タイムスタンプ)などの組み込みの動作を提供します。 これらの動作の添付:
<code class="language-php">public function beforeValidate()
{
    $this->LastEdited = new \yii\db\Expression('NOW()');
    return parent::beforeValidate();
}</code>
  • トランザクション操作:メソッドメソッドは、データベーストランザクションにどの操作をラップするかを定義し、データの一貫性を確保します。 transactions()
結論:

YII 2.0 ActiverCordは、データベースの相互作用を大幅に簡素化する強力で柔軟なORMを提供します。 汚い属性、イベント、動作、トランザクション運用などの高度な機能は、その能力と複雑なシナリオへの適応性を高めます。 この詳細な調査は、その強みを強調し、その潜在能力を最大限に活用する方法を示しています。

以上がYii 2.0 ActivereCordは説明しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。