我使用Cake 1.2.6,昨天晚上我注意到當我提交一個表單時,HABTM關係沒有被保存。__saveMulti()期間HABTM數據損壞?
我在Committee
和Volunteer
之間有HABTM關係。 Volunteer
的主鍵是UUID,而Committee
的主鍵是人類可讀的字符串(例如BOARDOFDIRECTORS
,FAIRCOMMITTEE
,FAIRCOMMITTEE
,FAIRASSOCIATES
等)。我有一個表單來創建/編輯志願者,並且該表單包含一個選擇框,其選項與您期望的完全相同,並且填充了從Cake的find('list')
方法返回的選項。雖然我想不出一個重要的原因,但只有一個委員會可以選擇成爲一名志願者(HABTM滿足未來的需求)。
初步結果顯示,選擇BOARDOFDIRECTORS
選項可按預期工作,但其他選項不會。通過核心代碼跟蹤執行使我Model->__saveMulti()
其中,在Line 1393,執行該代碼:
$data[$this->hasAndBelongsToMany[$assoc]['foreignKey']] = $id;
如果我的代碼之前轉儲$data
,輸出爲FAIRASSOCIATES。緊隨其後,其價值是4AIRASSOCIATES。假設這就是爲什麼這種關係沒有被保存似乎是安全的,但我還沒有弄清楚爲什麼數據在執行的這一點上正在發生變化。
有沒有其他人看到過這個?我錯過了一些關鍵的作品嗎?據我所知,這在v1.2.1中工作正常(我在一週前左右升級)。
UPDATE
表觀古怪我看到的第一個比特是,儘管我的$row
是一個字符串,在Line 1366條件計算結果爲true
所以我拖放到該代碼塊。如果我的數據是一個字符串,它如何具有成員值?
UPDATE
我顯然有一些思考的事,但這裏的底線。如果我放棄日誌寫入立即之前和之後立即Line 1394像這樣:
$this->log('Setting ' . $data . '[' . $this->hasAndBelongsToMany[$assoc]['foreignKey'] . '] = ' . $id, LOG_DEBUG);
$data[$this->hasAndBelongsToMany[$assoc]['foreignKey']] = $id;
$this->log('Creating ' . json_encode($data) . ' on ' . $join, LOG_DEBUG);
相關的輸出是:
2010-03-05 18:57:08 Debug: Setting FAIRASSOCIATES[volunteer_id] = 4b78717f-8ad4-4671-b81c-4e8745591fb4
2010-03-05 18:57:08 Debug: Creating "4AIRASSOCIATES" on CommitteesVolunteer
可能的問題:
- 我不知道如何/爲什麼Cake正試圖設置
volunteer_id
成員的字符串 - 「FAIRASSOCIATES」是一個委員會的ID,一個志願者呃被分組,不是任何類型的模型,所以我根本不明白
FAIRASSOCIATES[volunteer_id]
的相關性。 - 我不知道如何或爲什麼
$data
的價值被變換爲4AIRASSOCIATES
那一行代碼。
很好的解決方案,何塞。我的意圖是以類似的方式來覆蓋這一點,但我還沒有決定採取一種方法。這看起來很好,正在進行一些廣泛的測試 – 2010-03-12 23:28:00