我正在尝试在MyISAM数据库中实现级联UPDATE和DELETE效果(与使用外键在InnoDB表中创建的效果类似)。两个示例表:
现在,当我删除相册表中的一行时,我希望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);
}
答案 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