更新日: 2012-08-31 (金) 15:45:24 (812d)

:PHP

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ってしないと認識してくれませんでした。 [sad]
面倒です…それってそんなものなのでしょうか?
複数名はただ単にsをつけるだけで済むもので命名しておくのがトラブルが少なそうです。


選択肢 投票
このページの情報は役に立った 1  
このページの情報は役に立たなかった 1  
どちらでもない 1  

でじうぃきは神奈川県横浜市のWebシステム開発・スマートフォンアプリ開発の株式会社オンラインコンサルタントが運営しています。
タクシー検索 たくる 日本最大級タクシー検索 現在位置・料金・サービス・口コミでタクシー検索ができる
投稿
トップ   このページを編集する 再編集不可にする 差分 バックアップ 添付 複製 名前変更 リロード   新しいページを作る 一覧 検索する 最新の更新   ヘルプ   最終更新のRSS
Last-modified: 2012-08-31 (金) 15:45:24 (812d)