【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0002nobodyさん
2011/02/16(水) 22:01:14ID:???0003nobodyさん
2011/02/16(水) 23:30:29ID:???0004nobodyさん
2011/02/17(木) 00:27:39ID:???とすると、Userという配列の下に情報が入っている配列を取得するのですが、
Userの部分をなくしたものを取得することはできないでしょうか?
一つ一つデータ取る時、$item['User']['api']ではなく、$item['api']だけ書くほうが楽なもので。
[0] => Array
(
[User] => Array
(
[id] => 1
[api] => google
[coupon_id] => 6113
)
)
[1] => Array
(
[User] => Array
(
[id] => 2
[api] => agi
[coupon_id] => 5982
0005nobodyさん
2011/02/17(木) 00:36:34ID:???同じような質問をしているのを見つけました。
しかし、回避方法みたいなものはないっぽいので、仕様と諦めるしかないのかな。
0006nobodyさん
2011/02/17(木) 00:39:00ID:???afterFind()をAppModelに書いて処理したらいいんちゃう?
でもFormHelperと連動しなくなるとおもうけど。
0008nobodyさん
2011/02/17(木) 08:07:45ID:???マニュアルやcake辞典を読んだところ、
$this->Model->set('id',4);
$this->Model->saveField('buy_count', 3);
$this->Model->saveField('sold_out', 1);
このようにすれば、複数のフィールドを更新できるのですが、いくつものフィールドを
更新した場合、何行も繰り返さないといけない。。
こんなまどろっこしいことせずに、saveとconditionで一気に上書きするのがスマート
なやり方なのでしょうか。
0010nobodyさん
2011/02/17(木) 11:12:59ID:???いつの間にかCake風の構成にしてた。
多重配列って長くなって面倒だけど、わかりやすいよね。
0011nobodyさん
2011/02/17(木) 18:35:10ID:???バリデーション(モデル)とか
プログラム上での(コントローラー)表記を
ローカライゼーションしたい場合は
どうしたらいいの?
0012nobodyさん
2011/02/17(木) 18:39:45ID:???idを主キーにしていて
データの取り出しで
this->model->
findAllByName($hoge)
として
this->model->save($this->data)
した場合、上書き更新ではなく新レコード挿入になりますよね?
主キーでモデルのデータを取り出さない限り新レコード挿入になるのは分かるのですが、CakePHP仕様だと主キーを一つしか扱えないのでupdateAll()を使うしかないのでしょうか?
主キー以外のフィールドでの検索対象の
レコードを更新したい場合、
スマートなやり方だと、どういうやり方が一般的でしょうか?
0013nobodyさん
2011/02/17(木) 19:00:48ID:???idが$dataに含まれていれば更新になるよ
0014nobodyさん
2011/02/17(木) 20:58:03ID:???> バリデーション(モデル)とか
cakeplusというプラグインを使うか、
自分でエラーメッセージを置き換えるコードを書く。
> プログラム上での(コントローラー)表記を
コントローラーの好きなところで__()関数を書く。
0015nobodyさん
2011/02/17(木) 21:41:32ID:???idというフィールドを主キーにしていて
nameフィールドは主キーではありません。
findAllByNameしてレコードを特定していてもnameフィールドは主キーではないので、上書き更新されません。
新規レコード挿入になってしまいます。
0016nobodyさん
2011/02/17(木) 22:02:41ID:???users_codesのようにアンダーバーをつけてもいいですか?
その場合は外部からアソシエーションするときはusers_codes_idでok?
またフィールドにもbirth_dateのようにアンダーバーを使ってもいいですか?
0017nobodyさん
2011/02/17(木) 22:41:35ID:???横からだが、
$result = $this->Model->findAllByName($hoge);
これで取得できるデータには当然idが入ってるぞ。
ただ俺のほうでやったら、
$result = $this->Model->findAllByName($hoge);
debug($result); //データあり
debug($this->data) //NULL
だけどな。
>>16
試した事はないけど、users_codesの様に両方とも複数形で繋げると、
多分HABTMの中間テーブル扱いになっちゃうかもね。user_codesの様に1個目が単数系ならやったことある。
フィールドにアンダーバーはやってる。
0018nobodyさん
2011/02/17(木) 23:48:53ID:???絞り込む際のフィールドが主キーでなくても、それに合わせて上書き更新できるんですね!
ということは
$res=this->model->findAllByName($hoge);
this->model->save($result);
でいけるということですね!
普通、this->model->hoge
みたいにデータを取得しにいったら
自動的に$this->dataに結果が格納されるもんじゃなかったでしたか?
0019nobodyさん
2011/02/17(木) 23:51:37ID:???返信ありがとう!!!!
テーブルをuser_codesと名付けたとき
外部からアソシエーション組む際は
user_code_idってフォーインキーを用意してやればいいですか?
0020nobodyさん
2011/02/18(金) 01:11:29ID:???レコードが膨大な数になったときの工夫とかあるのかな?
それとユーザー写真をアップロードさせたら、どういうふうに管理すればいいですか?
データベース側はあくまでファイル名を記録しておいて、画像はwebroot/image/フォルダ内に一括して10万ファイルとかですか?
0021nobodyさん
2011/02/18(金) 05:55:46ID:???普通といわれても、やってみた結果がそうだっただけだからなぁ。
一応もっともらしい事を書くと、とあるModelのクラスのメソッドを呼んだだけで、
別のクラスであるControllerのメンバ変数に勝手に値を代入ってのは、
普通はしないと思うぞ。越権行為すぎる。
>>19
http://book.cakephp.org/ja/view/903/%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E8%A6%8F%E7%B4%84
一応、peopleテーブルはPersonモデルなのは、変な変換が入ったとかじゃなくって、
ほんとにそういう規約。
>>20
10万レコードも扱ったこと無いからわからん。
アップロード系のプラグインが英語圏製だけど一杯あるから探したらいいんじゃないかな。
プラグインが、10万レコード考慮してるかはしらんが。
最近のファイルフォーマットだと違うかもだけど、1ディレクトリ5000ファイルくらいにしといたほうがI/O的に良いんじゃない?
0022nobodyさん
2011/02/18(金) 21:20:08ID:???レコード数の多さはmysqlのチューニングの問題じゃないの?
ファイル管理はDB+非公開ディレクトリに小分けにすんのがいいんじゃないかね
0023nobodyさん
2011/02/18(金) 22:31:57ID:???非公開エリアにおいて、画像データ取得してGDで画像生成
する処理が発生するから負荷がかかるだろ。
0024nobodyさん
2011/02/18(金) 22:35:20ID:???fopen()して適切なheader()書いて出力するだけだろ。
そのほうがアクセスコントロールも出来るし。
まぁ必要なければ余計な処理だけどな。
0026nobodyさん
2011/02/19(土) 01:07:14ID:???10058.jpgは
pic/58/ フォルダの中に
17434.jpgは
pic/34/ フォルダの中にといった具合で
0027nobodyさん
2011/02/19(土) 01:23:37ID:???どうしたほうが良いかは要件と仕様しだいなんじゃないの?
ユーザーアップロードしたファイルの置き方は、CakePHPは特に関与しないし。
正解が無い部類の問題だから、
要件を満たす仕様を、見合った経験を持つアプリケーション設計者が考えるべき。
>>26 は >>20 だと思うんだけど、
この質問をするくらいのスキルなら、10万レコード・10万ファイルを扱うシステムを、
試行錯誤無しに設計するのは無理だと思うよ。
0028nobodyさん
2011/02/19(土) 01:56:06ID:???■ このスレッドは過去ログ倉庫に格納されています