2009-07-21 14 views
1

を使用してZend Framework 1.8.3で参照整合性を定義するヘルプmanualに記載されているZend Frameworksテーブル関係を使用して参照整合性関係を定義することはできません。Data Mapperモデル

私は可能な限りすべての設定を使い果たしてしまったので、望ましくないカスケード削除を使用できないアプリケーションの開発に直面しています。

何が間違っているのか誰かにご意見をお聞かせください。

私のプロジェクトは、新しいZF 1.8.3推奨の方法とデータマッパーを使用してセットアップされています。これがリファレンスガイドに記載されているように動作を再現できない理由ではないかと思います。誰にもこの問題の経験はありますか?

アプリケーション/モデル/ 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

+0

これは愚かなものです...そして、クラスの自動ロードはどうですか? –

答えて

0

Ohhhh、私は今、それを参照してください。あなたのクラスは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

おかげとなります。

DRIレイヤーを提供するためにZend Frameworkを使用する際の問題は、狭くなり、そのようにまとめられるようになりました。あなたは未使用二番目のパラメータを持っていないのはなぜ

私の地元UserControllerでて、関連するコメント、私はユーザーを削除することができていますこれらのクラス定義を使用してではなく、「公共/ユーザー/ /ユーザーID/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'; 



} 
関連する問題