2009-07-21 25 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'; 



}