Zend_Db_Table级联DELETE和UPDATE

时间:2009-12-27 20:10:41

标签: zend-framework zend-db-table

我正在尝试在MyISAM数据库中实现级联UPDATE和DELETE效果(与使用外键在InnoDB表中创建的效果类似)。两个示例表:

  • 相册
  • 照片(有一个album_id列,是相册表的“外键”)

现在,当我删除相册表中的一行时,我希望Zend_Db_Table自动删除照片表中的所有相关行。这就是我在专辑表中的内容:

protected $_name = 'albums';

protected $_dependentTables = array(
    'Photos'
);

我在照片表中有这个:

protected $_name = 'photos';

protected $_referenceMap = array(
    'Album' => array(
        'columns' => array('album_id'),
        'refTableClass' => 'Albums',
        'refColumns' => array('id')
    )
);

是的,当我删除相册表格中的一行时,该相册中的照片不会被删除。

这就是我删除相册的方式:

public function remove($id)
{
    $where = $this->getAdapter()->quoteInto('id = ?', $id, 'INTEGER');
    return $this->delete($where);
}

1 个答案:

答案 0 :(得分:3)

您需要设置级联删除。所以你的参考地图应该是:

protected $_referenceMap = array(
'Album' => array(
    'columns' => array('album_id'),
    'refTableClass' => 'Albums',
    'refColumns' => array('id'),
    'onDelete' => self::CASCADE
));

请在此处查看级联操作的完整说明:http://framework.zend.com/manual/en/zend.db.table.relationships.html#zend.db.table.relationships.cascading

NB级联操作仅在函数调用结果集的实际行(即Zend_Db_Table_Row类)时触发。要在此示例中触发删除功能:

$album = $albums->find($id);
$album->delete();//This triggers the cascading delete