CakePHP2で1段階以上先のリレーション先にもデータを保存する


Q. CakePHP2でリレーション先までデータを保存したい

A. saveAllメソッドにdeepオプションを渡してあげましょう。


・ArticleがItemを複数持ち、ItemはMetaItemを複数持っている(Naverまとめ的な)

Article.php

 array(
            'className' => 'Item',
            'foreignKey' => 'article_id',
            'dependent' => true
            )
    );
}

Item.php

 array(
            'className' => 'MetaItem',
            'foreignKey' => 'item_id',
            'dependent' => true
        )
    );
}

MetaItem.php

 array(
            'className' => 'Item',
            'foreignKey' => 'item_id'
        )
    );
}

保存するデータの構造

array(
    'Article' => array(
        ...
    ),
    'Item' => array(
        (int)0 => array(
            ...
        ),
        (int)1 => array(
            ...
            'MetaItem' => array(
                (int)0 => array(
                    ...
                ),
                (int)1 => array(
                    ...
                )
            )
        )
    )
)

使うメソッド

$this->Article->saveAll($data, array('deep' => true));

・コメント
なぜかリレーションが1段階先しか保存してくれない!!って困ったのでぐぐってみるとdeepオプションというのがあるじゃないですか!
ということで早速使ってみると見事解決。よかったよかった〜〜
適切なデータ構造を作って渡してあげれば適当に処理してくれるCakePHPありがとうございます!!

詳解CakePHP辞典―2.0/2.1/2.2/2.3対応
滝下 真玄
秀和システム
売り上げランキング: 112,599

tagamidaiki.comの著者が教えるプログラミングスクール – class Tech(クラステック)

更新情報はFacebookページで!

ブログの更新、読んで役立つ他ブログの記事などを更新しています。




関連のある記事