2009-07-21 28 views
1

我无法使用Zend框架表关系定义参照完整性关系,如manual中所述。帮助使用数据映射器模型在Zend Framework 1.8.3中定义参照完整性

我已经耗尽了所有可能的配置(所以它似乎),现在面临开发应用程序而不能使用级联删除的前景,这是不可取的。

任何人都可以看到什么是错的或提供任何建议吗?

我的项目是使用新的ZF 1.8.3建议的方法与datamappers建立的,我想知道这是否是我无法复制参考指南中描述的行为的原因。有没有人有任何这个问题的经验?

下面是类的相关部分:

应用程序/模型/ UsersMapper.php

class Default_Model_UsersMapper { 
    public function deleteUser($id, Default_Model_Users $users){ 

    $usersTable = new Default_Model_DbTable_Users();   
    $usersRowset = $usersTable->find($id);  
    $userToDelete = $usersRowset->current();  
    $userToDelete->delete(); 

} 

应用程序/模型/ DBTABLE/Users.php

class Default_Model_DbTable_Users extends Zend_Db_Table_Abstract 
{ 
/** 
* @var string Name of the database table 
*/ 
protected $_name = 'users'; 

/** 
* @desc reference map 
* 
*/ 
protected $_referenceMap = array(
    'Comment' => array(
    'columns'  => array('user_id'), 
     'refTableClass' => 'Comment', 
     'refColumns' => array('id'), 
     'onDelete'  => self::CASCADE 
    ) 
); 

} 

应用程序/模型/CommentMapper.php

...以及由类定义的相关表:

Comment.php

class Default_Model_DbTable_Comment extends Zend_Db_Table_Abstract 
{ 
/** 
* @var string Name of the database table 
*/ 
protected $_name = 'comment'; 

    /** 
* @desc Defining referential integrity here since we are using MyISAM 
* Dependent tables are referred via the class name. 
*/ 
protected $_dependentTables = array('Users'); 
} 
+0

为什么你有一个未使用的第二个参数deleteUser()? Default_Model_Users $ users – hobodave 2009-07-21 22:43:46

回答

0

天上,现在我明白了。你的类被命名为Default_Model_DbTable_Xxx,但你可以在你的类中将它们称为Xxx。进行tharkun建议的更改并将您的类名更改为有效:

例如,

protected $_dependentTables = array('Comment'); 

'refTableClass' =>  'User', 

成为

protected $_dependentTables = array('Default_Model_DbTable_Comment'); 

'refTableClass' => 'Default_Model_DbTable_User' 
1

感谢您对类定义察觉的错误。

我的问题得到Zend框架提供一个DRI层已变窄,现在可以概括为这样。

使用这些类的定义,我能够删除用户,但不是通过我的本地UserController中的相关注释“公共/用户/删除/用户名/ 22”

class Default_Model_DbTable_Comment extends Zend_Db_Table_Abstract 
    { 
     /** 
     * @var string Name of the database table 
     */ 
     protected $_name = 'comment'; 

     /** 
     * @desc reference map 
     * 
     * Rows in the comment table are to be automatically deleted if the row in the 
    * User table to which they refer is deleted 
    *  
    */ 
    protected $_referenceMap = array(
     'User' => array(
      'columns'  => 'user_id', // the foreign key(s) 
      'refTableClass' => 'Default_Model_DbTable_Users', 
      'refColumns' => 'id', 
      'onDelete'  => self::CASCADE, 
     ) 
    ); 

} 
class Default_Model_DbTable_Users extends Zend_Db_Table_Abstract 
{ 
    /** 
    * @var string Name of the database table 
    */ 
    protected $_name = 'users'; 


    /** 
    * @desc Defining referential integrity here since we are using MyISAM 
    * Dependent tables are referred via the class name. 
    */ 
    protected $_dependentTables = 'Default_Model_DbTable_Comment'; 



}