0

型付きモデルに対する Yii のビルトイン サポートはありますか? たとえば、Flashlight、Lock、Folder という名前のクラスがあり、それらはすべて Product アクティブ レコード モデルを拡張し、それを Yii リレーションを介したジェネリックではなく型付きクラスにしたい場合、どうすればよいでしょうか?

現在、私は __call を上書きしていますが、あまり満足していません。これはおそらく一般的なニーズだと思います。

4

1 に答える 1

2

これは単一テーブル継承と呼ばれます。

基本的に、モデルのインスタンス化メソッドを上書きして、必要なクラスを返します。

// protected/models/Product.php
protected function instantiate($attributes){
    switch($attributes['type']){
        case 'flashlight':
            $class='Flashlight';
        break;
        case 'lock':
            $class='Lock';
        break;
        case 'folder':
            $class='Folder';
        break;
        default:
            $class=get_class($this);
    }
    $model=new $class(null);
    return $model;
}
于 2012-12-20T14:57:13.627 に答える