2010-02-17 5 views
0

여러 개의 '지점'에 여러 개의 태그를 '태그'하려고합니다. 내 싱글 포인트를 성공적으로 태그 지정하고 있습니다. 불행히도, 시도하고 같은 태그로 'test2'같은 다른 지점에 태그를 사용하여 중 하나를 false로 설정할 내 '고유'또는 고유 한 true로 설정된 경우 나에게 중복 항목 오류를주는 것입니다, 그것은 'test2'에 대한 다른 모든 점들에 대한 필자의 del 태그와 하나의 새로운 점을 생성 할 것입니다. 여기 CakePHP - HABTM - 여러 지점에 여러 개의 태그 추가

내가 내 게시물 데이터를 가지고 무엇을 :

public $hasAndBelongsToMany = array(

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

나도 '독특한'가 true로 설정하여이 시도했다 : 내 태그 모델에서

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

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

) 

내가이 있습니다. 불행히도이 작업은 조인 테이블 ('points_tags')의 'Test2'인스턴스를 삭제합니다.

나는 save()와 saveAll()을 사용하여 이것을 시도했다. 둘 다이 오류를 보내고 있습니다 :

SQL 오류 : 1062 : 'MAN_ADD'키에 대해 '4b7af6d7-787c-4f10-aa49-2502c0a80001-4b47c66f-a130-4d12-8ccd-608'항목이 중복 됨 [ CORE/케이크/libs와/모델/데이터 소스/dbo_source.php, 라인 (527)] 질의 : 4b47c66f-a130-4d12 'points_tags (tag_id, point_id, id) VALUES ('4b7af6d7-787c-4f10-aa49-2502c0a80001 'INSERT INTO -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 '태그' test '를 입력하고'test '태그가 붙은'b '에 대한 항목을 삽입하십시오. 따라서 'test'로 만든 이전 연관을 제거하십시오. 그 점이 명확하게 설명되어 있습니까? – zmonteca

0

save 메소드를 사용할 때 루프 안에서 수행하고 있습니까? 회 돌이에 저장할 때마다 model :: create()를 호출하는 것이 가장 좋습니다.

HABTM 저장 동작에 문제가있을 때 모델명 :: create를 호출하지 않았기 때문에 자주 찾았습니다.

+0

나는 실제로 그렇게하고있다. 문제는 내 저장이 먼저 내 join 테이블에서 모든 tag_id를 선택한 다음 모든 태그를 삭제한다는 것입니다. 또는 내 tag_id 및 point_id를 기반으로 내 조인 테이블에서 all을 선택해야합니다. – zmonteca