在控制器中更改模型属性的问题

时间:2010-04-26 02:45:49

标签: cakephp

今天,当我尝试使用以下代码来改变控制器中的模型属性时,我遇到了问题

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,这让我很困惑。我希望有人能告诉我一些方向来解决这个问题。

此致

2 个答案:

答案 0 :(得分:3)

Model::useTable仅在模型实例化期间参考(请参阅Model::__construct的API文档)。如果您想动态更改模型表,则应使用Model::setSource

if ( $trigger == 1 ) {
    $this->User->setSource('betausers');
}

答案 1 :(得分:1)

在加载/实例化模型时,要使用的表是“固定的”。那时会创建一个数据库连接对象,正在检查表模式,还会发生很多其他事情。你可以随后改变那个变量,在那之后,Cake不会再看它了。

一个模型应与一个表关联,并且该关联不应在运行时更改。您需要创建另一个模型BetaUser并动态更改您正在使用的模型。或者重新考虑您的数据库架构,区分测试用户与users表中的常规用户的简单标志可能比整个新表更好。