2010-04-26 67 views
0

今天,我有一个问题,当我尝试使用下面的代码来改变模型属性在控制器问题与改变模型控制器属性

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

问候

回答

3

Model::useTable仅在模型实例化时参考(请参阅Model::__construct的API文档)。如果您想在飞行中更改模型的表格,应该使用Model::setSource

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

使用是“固定的”,当模型被加载/实例化的表。当时创建了一个数据库连接对象,表格模式正在被检查,并发生许多其他事情。您可以稍后更改该变量,Cake在此之后不再查看它。

一个模型应该与一个表关联,并且该关联不应在运行时更改。您需要制作另一个型号BetaUser并动态更改您使用的模型。或者重新考虑你的数据库模式,在users表中区分beta用户和普通用户的简单标志可能会比全新的表格更好。