Отношения CakePHP HABTM сохраняют новые ассоциации

У меня возникли проблемы с сохранением моих отношений HABTM для некоторого кода, с которым я работаю. У меня есть Podcasts и Categories в отношениях 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
            )
        );
}

Модель/Категория.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
                )

        )

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


person Bizarro181    schedule 07.07.2013    source источник
comment
I was under the impression - на основании какой документации?   -  person AD7six    schedule 08.07.2013
comment
На основе этого раздела. на странице "Сохранение ваших данных" в документации. Их примерный массив и описание Передача приведенного выше массива в saveAll() создаст содержащиеся в нем теги, каждый из которых связан с соответствующим рецептом.   -  person Bizarro181    schedule 08.07.2013


Ответы (1)


Вы можете это сделать, но с другим форматом данных, в котором каждая запись содержит связанные данные, как в следующем коде, который позволяет сохранить 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 не существует, он будет создан.

person nicolecoco02    schedule 14.01.2014