今天,当我尝试使用以下代码来改变控制器中的模型属性时,我遇到了问题
function userlist($trigger = 1)
{
if($trigger == 1)
{
$this->User->useTable = 'betausers'; //'betausers' is completely the same structure as table 'users'
}
$users = $this->User->find('all');
debug($users);
}
模型文件是
class User extends AppModel
{
var $name = "User";
//var $useTable = 'betausers';
function beforeFind() //only for debug
{
debug($this->useTable);
}
}
模型中的调试消息显示userTable
属性已更改为betausers
。并且应该显示表betausers
中的所有记录。但是,我仍然获得了数据在users
,这让我很困惑。我希望有人能告诉我一些方向来解决这个问题。
此致
答案 0 :(得分:3)
Model::useTable
仅在模型实例化期间参考(请参阅Model::__construct的API文档)。如果您想动态更改模型表,则应使用Model::setSource
:
if ( $trigger == 1 ) {
$this->User->setSource('betausers');
}
答案 1 :(得分:1)
在加载/实例化模型时,要使用的表是“固定的”。那时会创建一个数据库连接对象,正在检查表模式,还会发生很多其他事情。你可以随后改变那个变量,在那之后,Cake不会再看它了。
一个模型应与一个表关联,并且该关联不应在运行时更改。您需要创建另一个模型BetaUser
并动态更改您正在使用的模型。或者重新考虑您的数据库架构,区分测试用户与users
表中的常规用户的简单标志可能比整个新表更好。