2012-01-11 47 views
1

如何制作连接数据库中的三个表的模型?我的数据库结构是:如何将多个表中的数据放入一个模型中?

  • 用户
    • ID
    • 等领域
  • users_info
    • ID
    • users_id - 外键 '用户' 表
    • 其他字段
  • users_credentials
    • ID
    • users_id - 外键 '用户' 表
    • 等领域

前,我想有2代表在一个模型结合,所以我使用了addRelatedEntity方法。这里是我的代码:

class Model_UserInfo extends Model_Table{ 
    public $entity_code = 'user_info'; 
    function init(){ 
     parent::init(); 
     $this->addField('phone')->caption('Nr tel'); 
     $this->addField('users_id'); 
    } 
    function addRelation(){ 
     $this->addRelatedEntity('i','users','users_id','left outer'); 
    } 

} 

,然后我在别的文件时,它扩展 -

class Model_User extends Model_UserInfo{ 
    function init(){ 
     parent::init(); 
     parent::addRelation(); 

     $this->newField('name')->caption('Imie')->mandatory(true)->relEntity('i','name'); 
    } 

} 

这伟大的工作。但是如果我想将3个表格合并成一个模型呢?我无法扩展2个课程。有没有方法在Model_User中使用addRelatedEntity,并且引用了Model_UserInfo和Model_Credentials?

+0

调用parent :: addRelation();在面向对象编程方面不是一个好的方法。 $这 - > addRelation();是更好的,如果函数没有在当前类中定义它从父类继承,所以它将工作完全相同。只是想指出。 – romaninsh 2012-01-11 18:32:23

回答

1

您可能需要反转连接,并从由其他两个表连接的“用户”表开始,但只要您获得正确的查询,并不重要。

首先,将$this->debug();添加到模型的初始化中。这将帮助你,当你将进行调试加入,更新等

class Model_User extends Model_Table { 
    public $entity_code='users'; 
    function init(){ 
     parent::init(); 
     $this->newField('name') 
      ->caption('Imie') 
      ->mandatory(true); 
    } 
} 

class Model_User_Combined extends Model_User { 
    function init(){ 
     parent::init(); 

     $this->addRelatedEntity('info','users_info','inner','related'); 
     $this->addRelatedEntity('cred','users_credentials','inner','related'); 

     $this->addField('phone')->caption('Nr tel')->relEntity('info'); 
     $this->addField('password')->caption('Parol')->relEntity('cred'); 
    } 
} 

相比你现在的解决方案有很多,这里采用“用户”作为主表,并加入额外的表为“相关”。

此外,您将受益于继承,Model_User将为您添加一些基本的用户字段。

相关问题