マニュアルに記載されているように、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');
}