Zend Framework - Каскадное удаление с использованием шаблона сопоставления табличных данных
Моя проблема с получением Zend Framework для предоставления слоя DRI теперь может быть обобщена как таковая.
Используя приведенные ниже определения классов, я могу удалить пользователя, но не связанный комментарий через мой локальный UserController "public/users/delete/userId/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';
}
1 ответ
Я создал модели как ваши, и при тестировании оказалось, что это работает, только если зависимые таблицы перечислены в массиве:
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 = array('Default_Model_DbTable_Comment');
}
Когда они не перечислены в массиве, я получаю ошибку
Предупреждение: неверный аргумент, предоставленный для foreach() в C:\PHP\includes\ZendFramework-1.8.4-minimal\library\Zend\Db\Table\Row\Abstract.php в строке 632
Эта ошибка, возможно, не была видна в вашей среде.