我有Yii应用程序和两个具有相同结构tbl和tbl_history的表:
现在要创建模型,因此它将通过调用模型时发送的参数选择表。例如:
MyModel::model('tbl')->find();
//and
MyModel::model('tbl_history')->find();
在 Yii 论坛中查找相关文章和解决方案。进行了相同的更改,最后在MyModel中得到了这个:
private $tableName = 'tbl'; // <=default value
private static $_models=array();
private $_md;
public static function model($tableName = false, $className=__CLASS__)
{
if($tableName === null) $className=null; // this string will save internal CActiveRecord functionality
if(!$tableName)
return parent::model($className);
if(isset(self::$_models[$tableName.$className]))
return self::$_models[$tableName.$className];
else
{
$model=self::$_models[$tableName.$className]=new $className(null);
$model->tableName = $tableName;
$model->_md=new CActiveRecordMetaData($model);
$model->attachBehaviors($model->behaviors());
return $model;
}
}
现在当我做:
echo MyModel::model('tbl_history')->tableName(); // Output: tbl_history
它返回正确的值,但是:
MyModel::model('tbl_history')->find();
仍然返回tbl的值。
添加:
public function __construct($id=null,$scenario=null){
var_dump($id);
echo '<br/>';
parent::__construct($scenario);
}
并得到:
string(tbl_history)
string(tbl_history)
NULL
这意味着Yii从其他地方调用模型,但不知道从哪里以及如何阻止它。
它还对模型进行了 2 次调用,这对性能来说是否太糟糕了?