(後で)複数のデータベースを使用するYiiモデルがあり、テーブルプレフィックスはコードに基づいています。
例えば:
AMI_tablename、BMI_AMI_tablename など
これらのすべてのテーブルは同じですが、異なるデータベースにあります。
実行時に動的テーブル名を Yii モデルに提供する方法を知りたいですか?
セッター関数を使用しようとしましたが、親クラス CActiveRecord は子モデル クラスから値を取得しないため、エラーが発生します。
ここに私のモデルコードがあります(私が問題を抱えている部分のみ)
class RevShareModel extends CActiveRecord
{
public $prefix;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName()
{
return $this->prefix . '_revshare_model';
}
今、私のコントローラーのどこかに
$obj = RevShareModel::model();
$obj->prefix ="BMI";
$obj->tableName();
$obj->findByPk(1);
exit;
しかし、エラーが発生するのは次のとおりです。
CDbException
The table "_revshare_model" for active record class "RevShareModel" cannot be found in the database.
C:\wamp\www\framework\db\ar\CActiveRecord.php(2264)
tableName() メソッドが CActiveRecord によって呼び出されると、$prefix が取得されないようです。