Zend Framework - Каскадное удаление с использованием шаблона сопоставления табличных данных - PullRequest
0 голосов
/ 22 июля 2009

Моя проблема с получением 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 Ответ

0 голосов
/ 22 июля 2009

Я создал модели как ваши, и при тестировании выясняется, что это работает, только если зависимые таблицы перечислены в массиве:

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 \ включает в себя \ ZendFramework-1.8.4-minimal \ library \ Zend \ Db \ Table \ Row \ Abstract.php в строке 632

Возможно, эта ошибка не видна в вашей среде.

...