2012-05-07 87 views
2

CakePHP的默認設置爲true,我只是爲了確保它而編碼。 所以我有以下數據庫結構: 項目HABTM行動,唯一設置爲true。CakePHP - HABTM記錄將不會被刪除,唯一設置爲true

的情況如下:

刪除工作正常,在保存時,我刪除1條或多個記錄,如果ATLEAST 1紀錄停留「活」

刪除不工作時節省當我刪除所有記錄(或1記錄,如果這是唯一的記錄)。它只是保留所有現有的記錄。

我已確認與調試($這個 - >請求 - >數據)右保存在此之前,它包含了行動沒有。

+0

你有相反的關聯關係:行動HABTM項目?你從哪裏刪除?你嘗試通過一個保存操作(Action中沒有任何內容)或Model :: delete(),Model :: deleteAll()來刪除? –

+0

是的,在這兩個模型中,我聲明HABTM關係的'unique'設置爲true。我的確嘗試通過保存操作進行刪除,在Action的帖子中沒有任何內容。所以我不理解它,在Action的帖子裏沒有任何內容,它保留了它不應該記錄的記錄。 – pbond

+2

我的建議是溝通HABTM關係,並與'有很多通過'關係。 – Wylie

回答

4

從你的文章的評論的討論我仍然困惑,但我知道那是什麼你想: 保存在類似這樣的格式的POST: 陣列( 「項目」 =>陣列( 'ID'=> '3' ) 隨着:

$this->Item->SaveAll($this->request->data); 

你的POST應包含 '操作' 鍵:

array(
    'Item' => array(
     'id' => '3' 
    ), 
    'Action' => array(
     'Action' => array() 
    ) 

當e「操作」鍵被設置,Cake知道它必須「超越」關係和它的魔法。 然後它會刪除。

我只是測試這對我正在開發一個應用程序,實際上發現這是一個錯誤。 :D問題 是對於特定的HATBM關係,我不得不使用手動生成的表單,因此發佈時沒有包含關係鍵沒有設置和記錄,沒有被刪除。我想表格助手會處理這個問題。

如果你有類似的問題,你可以用兩種不同的方式管理這個:

  1. 將一個隱藏的輸入用JavaScript

  2. 在控制器檢查,如果「操作」鍵設置,如果不將其添加(作爲空數組):

    $這 - >請求 - >數據[ '動作'] [ '動作'] =陣列();

    這可能是一種侵入性,但它會做的工作。

+0

謝謝!這工作。我已經添加了'if(empty($ this-> request-> data ['modelname']))'check到我的控制器,並且在保存之前添加了一個空數組。我正在使用HTML表單助手順便說一句。 – pbond

+0

因此,如果您使用的表單助手比這可能是一個錯誤或impovemnt,你應該考慮報告它:http://cakephp.lighthouseapp.com/ –