2009-12-27 51 views
1

我試圖在MyISAM數據庫中實現級聯的UPDATE和DELETE效果(類似於可以在具有外鍵的InnoDB表中創建的效果)。兩個示例表:Zend_Db_Table級聯刪除和更新

  • 專輯
  • 照片(有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); 
} 

回答

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 
+0

是的,我補充說,那裏仍然不起作用。 –

+0

級聯操作僅在您調用行上的刪除功能時觸發,例如$ album-> delete(); – Akeem

+0

是的我知道,我正在使用$ this-> delete。檢查我的OP。 –