Craft CMS 覚え書き

Craft CMSというかYii Framework 2.6に関するメモ。

models


DBに保存されないデータモデル。
主に入力の検証を行う(ログインフォーム等のデータモデル)。
必須(required)、型(AttributeType)、規定値(default)、サイズ(length)などの属性を定義。


records


DBに保存するデータモデルは、Active Record(AR)として定義する。
DB型(ColumnType)、重複不可(unique)、主キー、外部キー、などRDBに関する定義は一通りできる。
Number型のPKは自動的にAuto Incrementになる。
作成したプラグインをインストールすると、recordsの定義通り、DBにテーブルが自動作成される。

リレーションの書き方サンプル

[MyPlugin_TagGroupRecord.php](親テーブル)
protected function defineAttributes()
{
return array(
'group_id' => array(AttributeType::Number, 'column' => ColumnType::PK, 'required' => true),
'tag_id' => array(AttributeType::Number, 'required' => true),
'content_id' => array(AttributeType::Number, 'required' => true),
);
}

public function defineRelations() {
return array(
'taggroup' => array(self::HAS_MANY, 'MyPlugin_TagRecord', 'tag_id'),
);
}


[MyPlugin_TagRecord.php](子テーブル)
protected function defineAttributes()
{
return array(
'tag_id' => array(AttributeType::Number, 'column' => ColumnType::PK, 'required' => true),
'name' => AttributeType::String,
);
}

public function defineRelations() {
return array(
'taggroup' => array(static::BELONGS_TO, 'MyPlugin_TagGroupRecord', 'tag_id', 'required' => true, 'onDelete' => static::CASCADE),
);
}

Craft CMSのdefineRelations()は、リレーションで親テーブルの主キー以外のカラムを参照しようとしても、主キーとリレーションを作成してしまうようなので、主キー以外とのリレーション定義は下記のようにするしかないかも。

[MyPlugin_TagRecord.php](子テーブル)
public function createTable() {
parent::createTable();
craft()->db->createCommand()->addForeignKey($this->getTableName(), 'tag_id', 'myplugin_taggroup', 'tag_id');
}



※入力>確認画面>保存のようなUIフローを持つ場合は、models/recordsを両方定義してもいい。
コメント
トラックバック
この記事のトラックバックURL