1

マニュアルに記載されているように、Zend Frameworks テーブル リレーションシップを使用して参照整合性リレーションシップを定義できません。

私は考えられるすべての構成を使い果たしましたが (そのようです)、カスケード削除を使用できずにアプリケーションを開発する可能性に直面していますが、これは望ましくありません。

誰が何が間違っているかを確認したり、提案を提供したりできますか?

私のプロジェクトは、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

…そして、クラスによって定義された関連テーブル:

コメント.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');
}
4

2 に答える 2

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'
于 2009-07-21T22:51:20.547 に答える