Zend CASCADE об отношениях «многие ко многим» - PullRequest
0 голосов
/ 20 февраля 2012

Я использую Zend_Db_Table_Abstract по умолчанию, чтобы установить отношения.Это мои модели:

Model_Table_Project:

protected $_name = 'projects';
protected $_dependentTables = array('Model_Table_ProjectStage');
protected $_referenceMap = array(
    'User' => array(
        'columns' => 'userId',
        'refTableClass' => 'Model_Table_User',
        'refColumns' => 'id'
    )
);

public function deleteProject($id)
{
    $row = $this->find($id)->current();
    if ($row)
    {
        $row->delete();
    }
    else
    {
        throw new Zend_Exception('Cannot delete project.');
    }
}

Model_Table_Stage:

protected $_name = 'stages';
protected $_dependentTables = array('Model_Table_ProjectStage');

Model_Table_ProjectStage:

protected $_name = 'projectstage';
protected $_referenceMap = array(
    'Project' => array(
        'columns' => 'projectId',
        'refTableClass' => 'Model_Table_Project',
        'refColumns' => 'id',
        'onDelete' => self::CASCADE,
    ),
    'Stage' => array(
        'columns' => 'stageId',
        'refTableClass' => 'Model_Table_Stage',
        'refColumns' => 'id',
        'onDelete' => self::CASCADE,
    )
);

Теперь, когда я хочу удалитьпроект, используя метод deleteProject () в Model_Table_Project, удаляет запись в таблице Project и записи в таблице ProjectStage, но не удаляет записи в таблице Stage.

Что я делаю не так?

1 Ответ

0 голосов
/ 22 февраля 2012

Я нашел решение.Это была ошибка моего мышления.Теперь я использую решение:

В модели таблицы я вызываю $ row-> delete (), а в модели строки я объявил метод удаления:

public function delete()
{
    $stages = $this->getStages();

    foreach ($stages as $stage)
    {
        $stage->delete();
    }

    return parent::delete();
}

Таким образом, сначалаудалить все связанные этапы, а затем он удаляет сам себя.

...