CakePHPでループを使って配列のデータを追加する
たとえば、データが複数あり、これをデータベースに上書きでなくて、追加でしていきたい場合があると思います。
例:Categoryというモデルにcategory_idsという配列のデータを加えたい foreach($category_ids as $category_ids){ $this->data['Category']['category_id']=$category_ids; $this->Category->save($this->data);
}
上記のようにすると、$category_idsの数だけSQLでUPDATEが実行され、都度、値が上書きされるので、最後の値しか入りません。
そのため、createというメソッドを次のように呼んでやります。
foreach($category_ids as $category_ids){ //createを追加 $this->Category->create($data = array()); $this->data['Category']['category_id']=$category_ids; $this->Category->save($this->data); }
すると、ループされるたび、INSERTが実行されてデータが追加されます。
元ネタ
http://book.cakephp.org/ja/view/75/Saving-Your-Data
余談ですが、categoryというモデル名にしたために、面倒なことになりました。
データベースのテーブル名はcategoriesで認識してくれます。
ですが、他のテーブルとhasAndBelongsToMany(HABTM)で関連付けるときのテーブル名やID名はcategorysってしないと認識してくれませんでした。
面倒です…それってそんなものなのでしょうか?
複数名はただ単にsをつけるだけで済むもので命名しておくのがトラブルが少なそうです。