0

作業中のコードの HABTM 関係を保存する際に問題が発生しています。私はHABTM 関係にPodcastsあります。Categories以下のコードと問題の説明

モデル/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」が保存され、結合テーブルが新しく追加された ID で更新されます。これは不可能ですか、それともここの写真の一部が欠けていますか?

4

1 に答える 1

0

あなたはそれを行うことができますが、2つのレコードを保存できる次のコードのように、各レコードに関連データが含まれる別のデータ形式を使用します:

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

この配列を Podcast/Category モデルの 1 つで saveAll メソッドに渡します。

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

ただし、カテゴリに id を指定しないと、同じ名前の既存のカテゴリが存在する場合でも作成されるので注意してください。

ID 25 の Podcast が存在しない場合は、作成されます。

于 2014-01-14T10:19:05.573 に答える