php多表模型,php – Yii多个表的一个模型

在Yii应用程序中,遇到一个问题,即创建的模型无法根据参数动态选择要操作的数据表。尽管模型的`tableName`属性能正确设置为指定的表名(如'tbl_history'),但在执行查询操作如`find()`时,模型仍然使用默认的表名('tbl')。这可能导致了性能上的损失,因为模型被两次调用。目前尚未确定Yii内部何处导致了这个问题。
摘要由CSDN通过智能技术生成

我有Yii应用程序和两个具有相同结构的表tbl和tbl_history:

现在想要创建模型,因此它将在调用模型时通过我发送的参数选择表.例如:

MyModel::model('tbl')->find();

//and

MyModel::model('tbl_history')->find();

在Yii论坛中找到related article解决方案.做了相同的更改,最后在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 '
';

parent::__construct($scenario);

}

得到了:

string(tbl_history)

string(tbl_history)

NULL

这意味着Yii从其他地方调用模型,但不知道从哪里以及如何防止它.

它也会对模型进行2次调用,这对性能来说太糟糕了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值