2016-12-27 10 views
1

追加データをbelongsToMany結合テーブルに保存しようとしています。 私は指示に従いましたhere idが使用されているため、エンティティがすでに存在する場合にのみ表示されます。しかし、私のエンティティは新しく作成し、追加の結合データを保存する必要があります。 保存データは次のようになります。すべてが参加するテーブル内の追加フィールド「type_keys」結合エンティティが作成された場合、追加データをテーブルに追加する方法

(int) 0 => object(Cloud\Model\Entity\MediaObject) { 

     'media_object_type_id' => 'image', 
     'title' => '1482842705_1_749145', 
     'relative_path' => '/optional_images/1/1/', 
     'extension' => 'jpg', 
     'size' => (int) 142683, 
     'original_title' => 'logo.jpg', 
     '_joinData' => [ 
      'type_key' => 'optional_image_1' 
     ], 
     '[new]' => true, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [ 
      'media_object_type_id' => true, 
      'title' => true, 
      'relative_path' => true, 
      'extension' => true, 
      'size' => true, 
      'original_title' => true, 
      '_joinData' => true 
     ], 
     '[original]' => [], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[invalid]' => [], 
     '[repository]' => 'Cloud.MediaObjects' 

    } 

残念ながらちょうどて、joind IDSを除き、細かい永続化され保存されている、誰かができればjoinDataフィールド「type_keys」が

私は幸せになるではありません私に手がかりを与えてください。

さらにテストすると、保存時に結合データが上書きされることがわかりました。 詳細情報:beforeSaveコールバックでメディアオブジェクト結合データを設定しています。

object(Cloud\Model\Entity\Touchpoint) { 

'title' => 'test', 
'user_id' => (int) 1, 
'tp_image' => [ 
    'name' => '', 
    'type' => '', 
    'tmp_name' => '', 
    'error' => (int) 4, 
    'size' => (int) 0 
], 
'optional_image_1' => [ 
    'name' => 'logo.jpg', 
    'type' => 'image/jpeg', 
    'tmp_name' => '/tmp/phpMeTwuQ', 
    'error' => (int) 0, 
    'size' => (int) 142683 
], 
'created' => object(Cake\I18n\Time) { 

    'time' => '2016-12-27T13:19:03+00:00', 
    'timezone' => 'UTC', 
    'fixedNowTime' => false 

}, 
'modified' => object(Cake\I18n\Time) { 

    'time' => '2016-12-27T13:19:03+00:00', 
    'timezone' => 'UTC', 
    'fixedNowTime' => false 

}, 
'brand_id' => (int) 1, 
'media_objects' => [ 
    (int) 0 => object(Cloud\Model\Entity\MediaObject) { 

     'media_object_type_id' => 'image', 
     'title' => '1482844743_1_988232', 
     'relative_path' => '/optional_images/1/1/', 
     'extension' => 'jpg', 
     'size' => (int) 142683, 
     'original_title' => 'logo.jpg', 
     '_joinData' => object(Cake\ORM\Entity) { 

      'touchpoint_id' => (int) 8, 
      'media_object_id' => (int) 8, 
      '[new]' => false, 
      '[accessible]' => [ 
       '*' => true 
      ], 
      '[dirty]' => [], 
      '[original]' => [], 
      '[virtual]' => [], 
      '[errors]' => [], 
      '[invalid]' => [], 
      '[repository]' => 'MediaObjectsTouchpoints' 

     }, 
     'created' => object(Cake\I18n\Time) { 

      'time' => '2016-12-27T13:19:03+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'modified' => object(Cake\I18n\Time) { 

      'time' => '2016-12-27T13:19:03+00:00', 
      'timezone' => 'UTC', 
      'fixedNowTime' => false 

     }, 
     'id' => (int) 8, 
     '[new]' => false, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [], 
     '[original]' => [ 
      '_joinData' => [ 
       'type_key' => 'optional_image_1' 
      ] 
     ], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[invalid]' => [], 
     '[repository]' => 'Cloud.MediaObjects' 

    } 
], 
'id' => (int) 8, 
'[new]' => false, 
'[accessible]' => [ 
    '*' => true 
], 
'[dirty]' => [], 
'[original]' => [], 
'[virtual]' => [], 
'[errors]' => [], 
'[invalid]' => [], 
'[repository]' => 'Cloud.Touchpoints' 

}

は、だから私は、それが上書きされます知っているが、私はこの正しい方法を行う方法がわからないのですか?

答えて

1

私は解決策を今見つけました。

私はエンティティが_joinDataとして作成されているのを見たので、エンティティを自分で作成し、エンティティ自身でプロパティを設定しました。このようにして_joinDataは置き換えられず、IDだけで充実しました。

$joinTable = TableRegistry::get('MediaObjectsTouchpoints'); 
$newMediaObject->_joinData = $joinTable->newEntity(); 

$newMediaObject->_joinData->type_key = 'something'; 

$entity->media_objects[] = $newMediaObject; 
関連する問題