2013-07-07 1 views
0

У меня возникли проблемы с сохранением моих отношений HABTM для некоторого кода, с которым я работаю. У меня есть Podcasts и Categories в отношениях HABTM. Код и проблема объяснения нижеCakePHP HABTM отношения, сохраняющие новые ассоциации

Модель/Podcast.php

class Podcast extends AppModel{ 
    public $hasMany = 'Episode'; 
    public $hasAndBelongsToMany = array(
     'Category' => 
      array(
       'className' => 'Category', 
       'joinTable' => 'categories_podcasts', 
       'foreignKey' => 'podcast_id', 
       'associationForeignKey' => 'category_id', 
       'unique' => false 
      ) 
     ); 
} 

Модель/category.php

class Category extends AppModel{ 
    public $hasAndBelongsToMany = array(
     'Podcast' => 
      array(
       'className' => 'Podcast', 
       'joinTable' => 'categories_podcasts', 
       'foreignKey' => 'category_id', 
       'associationForeignKey' => 'podcast_id', 
       'unique' => false 
      ) 
     ); 
} 

Это то, что массив я прохожу в saveAll() выглядит

Array 
(
    [Podcast] => Array 
     (
      [name] => Mohr Stories - FakeMustache.com 
      [description] => Join your host Jay Mohr and a rotating cast of his hilarious friends as they regale you with tales and conversation covering every topic imaginable. You haven't heard the half of it until you've heard... Mohr Stories. 
      [website] => http://www.FakeMustache.com 
     ) 

    [Category] => Array 
    (
     [0] => 1 
     [1] => 2 
    ) 

) 

Который работает отлично - подкаст добавляется и присоединиться к таблице обновляется, но я был под впечатлением, что мой Category массив может выглядеть следующим образом:

[Category] => Array 
     (
      [0] => Array 
       (
        [name] => Test 
       ) 

      [1] => Array 
       (
        [name] => Test2 
       ) 

     ) 

Что бы сохранить новые категории «Test» и «Test2», а затем обновите таблицу соединений с их новыми добавленными идентификаторами. Разве это невозможно, или я пропускаю часть картины здесь?

+0

'Я был под впечатлением' - на основе какой документации? – AD7six

+0

На основе [данного раздела] (http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-habtm) страницы Сохранение ваших данных Docs. Их массив примеров там и описание _ «Передача указанного массива в файл saveAll() создаст содержащиеся теги, каждый из которых связан с их соответствующими рецептами.» _ – Bizarro181

ответ

0

Вы делаете в состоянии сделать это, но с другой формат данных, в которой каждая запись содержит связанные данные, как на следующий код, который позволяет сохранить 2 записи:

array{ 
    array{ 
     'Podcast' => array { 
      'id' => 25 
     }, 
     'Category' => array { 
      'name' => 'Test' 
     } 
    } 
    array{ 
     'Podcast' => array { 
      'id' => 25 
     }, 
     'Category' => array { 
      'name' => 'Test2' 
     } 
    } 
} 

Пройди этот массив в SaveAll метод на одной из ваших моделей подкастов/категорий.

$this->Podcast->saveAll($myData); 

Но будьте осторожны, как вы не обеспечиваете идентификатор для категорий, они будут созданы, даже если есть существующие категории с тем же именем.

И Если подкаст с идентификатором 25 не существует, он будет создан.