2014-10-24 2 views
0

이 특정 문제에 대해 많은 질문이 있으며 공식 문서에는 예제가 있습니다. 그러나 내가 잘못하고있는 것을 발견 할 수 없었습니다.CakePHP 2.5 habtm 저장하지 않음

나는 HABTM 관계가있는 두 개의 모델을 가지고 있지만 분명히 조인과 최종 테이블에 아무것도 저장하지 않습니다. 이것들은 내가 구하려고하는 테이블, 모델 및 배열입니다.

테이블 :

챔피언 테이블 :

CREATE TABLE `champions` (
`id` int(11) unsigned NOT NULL, 
`key` varchar(50) DEFAULT NULL, 
. 
. 
. 
`created` datetime NOT NULL, 
`modified` datetime NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

champions_tags 테이블 :

CREATE TABLE `champions_tags` (
`id` int(11) NOT NULL, 
`champion_id` int(11) NOT NULL, 
`tag_id` int(11) NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

태그 테이블 :

CREATE TABLE `tags` (
`id` int(11) NOT NULL, 
`type` varchar(50) DEFAULT NULL, 
`created` datetime NOT NULL, 
`modified` datetime NOT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

모델 :

Champion.php

public $hasAndBelongsToMany = array(
    'Tag' => array(
       'foreignKey'   => 'champion_id', 
       'associationForeignKey' => 'tag_id', 
       'unique'    => 'keepExisting' 
    ) 
); 

Tag.php

public $hasAndBelongsToMany = array(
     'Tag' => array(
      'foreignKey'   => 'tag_id', 
      'associationForeignKey' => 'champion_id', 
      'unique'    => 'keepExisting' 
     ) 
    ); 

마지막으로이 내가 저장 한 태그 테이블에 확산하는 것을 시도하고있는 정보는

Array 
    (
     [Champion] => Array 
      (
       . 
       . 
       . 
       [Tag] => Array 
        (
         [0] => Array 
          (
           [id] => 2660 
           [type] => Fighter 
          ) 

         [1] => Array 
          (
           [id] => 2661 
           [type] => Tank 
          ) 

        ) 

      ) 
    ) 

답변

0

CakePHP 2.x에서 HABTM은 까다 롭습니다. 데이터를 저장하는 데 특히 효과적입니다. 귀하의 경우를 들어

, 데이터는 다음과 같이한다 :

<?php 
$this->Champion->save([ 
    'Champion' => [ 
     'key' => 'championKey', 
    ], 
    'Tag' => [ 
     'Tag' => [2660, 2661], 
    ], 
]); 

당신이하지 않는 태그를 연결하려는 경우 아직 존재? 먼저 작성한 다음 id$data['Tag']['Tag'] 목록에 추가하십시오.

당신은 같은 시간에 챔피언을 저장하고 새 태그를 만들 수 있지만 불행하게도 하나 하나에 의해 수행 될 수있다 할 수 있습니다 : 당신은 모든 정보를 찾을 수 있습니다

<?php 
$this->Champion->save([ 
    'Champion' => [ 
     'id' => 1, 
    ], 
    'Tag' => [ 
     'type' => 'new type 1', 
    ] 
]); 
$this->Champion->save([ 
    'Champion' => [ 
     'id' => 2, 
    ], 
    'Tag' => [ 
     'type' => 'new type 2', 
    ] 
]); 
$this->Champion->save([ 
    'Champion' => [ 
     'id' => 2, 
    ], 
    'Tag' => [ 
     'type' => 'new type 3', 
    ] 
]); // /!\ Champion #2 is not tagged with 'new type 2' anymore! 

in the docs :