2010-02-17 118 views
0

我想用多個標記「標記」多個「點」。我成功地標記了我的單點。不幸的是,當我嘗試使用標籤,如另一個點上的'test2'作爲標籤時,如果我將'獨特'設置爲false或'unique'設置爲true,那麼它會給我一個重複的輸入錯誤,它會刪除我的標籤,爲'test2'的所有其他點,並創建一個新的。CakePHP - HABTM - 爲多個點添加多個標記

以下是我對我的帖子的數據:

Array 
(
    [Tag] => Array 
     (
      [id] => 4b7af6d7-787c-4f10-aa49-2502c0a80001 
      [name] => Test2 
     ) 

    [Point] => Array 
     (
      [id] => 4b47c66f-a130-4d12-8ccd-60824051e4b0 
     ) 

) 

在我的標籤模式,我有這樣的:

public $hasAndBelongsToMany = array(

'Point' => array(
     'className' => 'Point', 
     'joinTable' => 'points_tags', 
     'foreignKey' => 'tag_id', 
     'associationForeignKey' => 'point_id', 
     'unique' => false) 
); 

我曾試圖與「獨一無二」設置爲真,太。不幸的是,這將刪除連接表('points_tags')中的任何其他'Test2'實例。

我嘗試過使用save()和saveAll()。兩者都給我這個錯誤:

警告(512):SQL錯誤:1062:重複條目'4b7af6d7-787c-4f10-aa49-2502c0a80001-4b47c66f-a130-4d12-8ccd-608''MAN_ADD'[ CORE /餅/庫/模型/數據源/ dbo_source.php,線527] 查詢:INSERT INTO points_tagstag_idpoint_idid)VALUES( '4b7af6d7-787c-4F10-aa49-2502c0a80001','4b47c66f-a130-4d12 -8ccd-60824051e4b0' , '4b7b39f3-46f8-4744-ac53-3973c0a80001')

思考????

建議????

回答

0

id從哪裏來?我猜測它是表格的主鍵,並且從我的帖子中瞭解到(請寫得更清楚,幫助我們幫助你),問題不在於點或標籤,而在於points_tags表中的id。

+0

您說的id是tag_id或point_id。 tag_id來自標籤,如果它已經存在,並且point_id是我試圖標記的項目的id。 我腦海裏的問題是,如果一個條目已經從另一個項目中出現,那麼points_tags條目就會越過寫入。 例如: 點'有一個標籤 - 測試 如果我也想標記點「B」與標籤「測試」,它會刪除points_tags爲點當前條目「A」與標籤「測試「併爲標記'測試'插入點'b'的條目。因此刪除以前使用'test'進行的關聯。 這是否爲您澄清? – zmonteca 2010-02-17 16:21:38

0

當你使用save方法時,你是在循環中做它嗎?請記住,最佳實踐是在保存循環時調用model :: create()。

我經常發現,當我遇到HABTM保存行爲問題時,這是因爲我沒有調用model :: create。

+0

我真的這樣做。問題在於我的保存是先從我的連接表中選擇我所有的tag_id,然後刪除所有這些。 或者,它應該根據我的tag_id和point_id從我的連接表中選擇所有。 – zmonteca 2010-02-17 18:28:51