1 名前:nobodyさん [2008/03/14(金) 15:16:00 ID:HF9x5ODX] www.cakephp.org/ 10分で作るCakePHPアプリ for Windows p4life.jp/cake/ マニュアル日本語化 www.cakephp.jp/doc/ 日本語フォーラム cakephp.jp/modules/newbb/ あとこのへんとか(初心者向けTIPS) www.avatarfinancial.com/pages/cake/ CakePHP入門リンク集 ttp://pub.studio15.jp/2007/11/13/cakephp-links/ 【PHP】フレームワーク CakePHP 2ホール目 pc11.2ch.net/test/read.cgi/php/1194976228/ 【PHP】フレームワーク CakePHP pc11.2ch.net/test/read.cgi/php/1163850802/
531 名前:nobodyさん mailto:sage [2008/04/02(水) 17:08:00 ID:???] SimpleTestの方が時間かかるよ
532 名前:nobodyさん mailto:sage [2008/04/02(水) 17:08:48 ID:???] 内部のデータを調べるようなテスト時間かかるに決まってるやろ
533 名前:nobodyさん mailto:sage [2008/04/02(水) 17:09:00 ID:???] また、例の嵐だな。
534 名前:nobodyさん mailto:sage [2008/04/02(水) 17:09:39 ID:???] とりあえず言っておくけど、CIは糞だから、 糞スレでやってねw
535 名前:nobodyさん mailto:sage [2008/04/02(水) 17:13:49 ID:???] >>532 たしかに!
536 名前:nobodyさん mailto:sage [2008/04/02(水) 17:16:18 ID:???] >>522 日本語でおk
537 名前:nobodyさん mailto:sage [2008/04/02(水) 17:18:56 ID:???] なんか、CI普及の為(?)にわざとアフォなことを言っている気がする。 いや、まて、わざと悪い例を出しているのか? まあ、訂正している俺は考えをまとめられていいけどな。 (そして訂正している文を見て学習する人もいるだろう) > モデルとビューに命令出すのに薄い実装なんて物理的に無理 > モデルはカラッポでOK コントローラが出す命令はすごく小さなものだよ。 モデルに対して、「データ取って来い!」「書き込め!」「削除しろ!」 そして、「複雑な一連の処理をしろ!」 前三つは、CakePHPの自動生成コードでも書いてあるから 簡単にわかると思うけど最後の「複雑な一連の処理をしろ!」を モデルに書くべきってことをわかってない人が多いんだよね。 複雑な一連の処理をコントローラに書いてしまう。悪い例だ。
538 名前:nobodyさん mailto:sage [2008/04/02(水) 17:27:44 ID:???] >>537 テストのことを考えていってんの?俺はテストはブラウザでしかしないからw
539 名前:nobodyさん mailto:sage [2008/04/02(水) 17:29:17 ID:???] テスト中心に設計するならモデルに詰め込めるだけ詰め込めばいいんじゃね
540 名前:nobodyさん mailto:sage [2008/04/02(水) 17:30:57 ID:???] >>537 複雑な一連の処理を具体的に述べよ はなしはそれからだ
541 名前:nobodyさん mailto:sage [2008/04/02(水) 17:32:26 ID:???] where が入るような条件文はモデルに書けばいいの?
542 名前:nobodyさん mailto:sage [2008/04/02(水) 17:33:42 ID:???] >>537 モデルにもっていっていいのは どこからどこまで?
543 名前:nobodyさん mailto:sage [2008/04/02(水) 17:45:27 ID:???] >>537 いくら給料もらってんだよ 俺はPHPプログラマで36万円
544 名前:nobodyさん mailto:sage [2008/04/02(水) 17:53:38 ID:???] モデル上で別のモデルのデータ取得できなくね?
545 名前:nobodyさん mailto:sage [2008/04/02(水) 17:55:24 ID:???] >>542 どこまでをモデルでやるかは結局設計しだいだけど、 >>541 ユーザーがフォームからの条件入力。URL形式での条件入力 、つまりコントローラのアクション関数の引数に入る場合。 その引数をもとにモデルを呼び出すわけだけど、 このときのモデルの関数は汎用的なfind関数でもいいし、 もっと簡単に扱いたければ、モデルに専用の関数を作って呼び出す。 汎用的なfind関数を使う場合には、array('key' => '= ' . $value)なんて 条件データに加工しないといけないよね? これがコントローラの処理。 モデルに専用の関数を作る場合、もっと簡単に使える関数にするね。 もちろんその場合、モデル内部でfind関数を使うことになるだろうし、 そのための条件の加工もモデルに書く。 ユーザーの入力した条件が、POSTでくる場合は、 $this->dataから条件を作り出す所までもうちょっと コントローラでやる仕事が増えるだろう。 それでもコントローラの処理(モデルを呼び出すところまで)はこれだけ。 俺ならこのように作るよ。 あとモデルから戻ってきたデータを、ビューで使いやすいように 単純化するのもコントローラの仕事だね。
546 名前:nobodyさん mailto:sage [2008/04/02(水) 17:59:00 ID:???] >>544 > モデル上で別のモデルのデータ取得できなくね? モデル上で別のモデルのデータを使用したいと思ったとき、 その二つのモデル間には関連性がある。 つまりアソシエーションを定義している。 アソシエーションを定義しているのなら、 モデル内で、別のモデルを呼び出すことが出来る。 Model1の中から、$this->Model2->findAll(); 感じで呼び出せる。
547 名前:nobodyさん mailto:sage [2008/04/02(水) 18:01:31 ID:???] >>545 モデルから戻ってきたデータを、ビューで使いやすいように単純化 数字にコンマ付けたりとか?
548 名前:nobodyさん mailto:sage [2008/04/02(水) 18:02:43 ID:???] >>546 そのやり方はCakePHPで推奨されてる方法なの?
549 名前:nobodyさん mailto:sage [2008/04/02(水) 18:05:48 ID:???] >>546 わざわざアソシエーションするの? いつも結合されて重くなるじゃん
550 名前:nobodyさん mailto:sage [2008/04/02(水) 18:06:46 ID:???] >>547 それは見た目を変えるだけだからビューの仕事だろうね。 モデルから戻ってきたデータとは、汎用的なfind関数の場合、 $data => array( モデル名 => array( フィールド名1 => 値1, フィールド名2 => 値2, フィールド名3 => 値3, ) ) こんな値が返ってくる。もちろん、これをそのまま ビューに渡してもいいんだけど、これじゃあビューで使いにくい! って言う場合加工する。 そんな場合あるのかって? 余り無いだろう。 そう、だからコントローラの仕事は少ない。 モデルから取得した値をビューに渡す$this->set(・・・) は コントローラの仕事ね。
551 名前:nobodyさん mailto:sage [2008/04/02(水) 18:07:42 ID:???] >>549 必要なときにつけたりはずしたりする方法は、何度も既出
552 名前:nobodyさん mailto:sage [2008/04/02(水) 18:11:37 ID:???] >>548 だめなのか?
553 名前:nobodyさん mailto:sage [2008/04/02(水) 18:12:12 ID:???] >>546 なんでモデルでやるの?そのメリットは?
554 名前:nobodyさん mailto:sage [2008/04/02(水) 18:21:49 ID:???] >>553 もちろん、直接関係が無いモデルは別々に アクセスするよ。 モデルというか処理の内容から考えて 一つであるべきと思う場合は一つのモデルでやる。 あと、トランザクションの為のメソッドが モデルにあることも興味深いよね。 一連関係ある処理は一つのモデル内で完結させるものと 考えると、なるほどと思わない?
555 名前:nobodyさん mailto:sage [2008/04/02(水) 18:23:17 ID:???] >>546 モデルは複雑にすべきじゃないよ。な中規模設計したとき アソシエーションで必ず問題起きそう
556 名前:nobodyさん mailto:sage [2008/04/02(水) 18:27:56 ID:???] >>555 その意見はわからないでもないが、 普通にRDBMSを正規化したとき そういう関連(リレーション)は出来るもんなんだが・・・ RDMSを正規化すると複雑になってしまう。それがいやだから それを解決する為に、O/Rがあるんだと思うぞ!
557 名前:nobodyさん mailto:sage [2008/04/02(水) 18:28:26 ID:???] ×RDBMSを正規化したとき ○RDBMSでテーブルを正規化したとき
558 名前:nobodyさん mailto:sage [2008/04/02(水) 18:32:44 ID:???] >>546 ページ数が増えたとき、コントローラを増やすことができるけど コントローラが増えた分モデルを増やすこと出来ないよ。 ひとつのモデルに書くコードが恐ろしく増えるね
559 名前:nobodyさん mailto:sage [2008/04/02(水) 18:34:17 ID:???] また例の馬鹿か?
560 名前:nobodyさん mailto:sage [2008/04/02(水) 18:35:56 ID:???] > コントローラが増えた分モデルを増やすこと出来ないよ。 言っている意味が、よくわからないんだが・・・ 例えコントローラが無くてもモデルは作れるし、 一つのコントローラで複数モデルを扱うことも出来るんだが?
561 名前:nobodyさん mailto:sage [2008/04/02(水) 18:43:36 ID:???] 全てはコントローラに処理を詰め込み過ぎたscaffoldが悪い。 あれがアフォに勘違いを植え込む。
562 名前:nobodyさん mailto:sage [2008/04/02(水) 18:49:12 ID:???] うーん、自動生成のコードとしては、これしかやりようがない所もあるのだろうけど、 コントローラに処理を詰め込みすぎというか、モデルに処理が何も無いのが いけないんじゃないかな? あれじゃ、単にテーブルに直接アクセスするネイティブな関数の 代わりのクラスにしか見えない。 一番、プログラマがいろいろ書くべきなのはモデルなのに。 逆に言えば、いろいろ書かないといけないものだからこそ 自動生成ではモデルに何もないんだろうね。 でもサンプル程度はほしいかも。
563 名前:nobodyさん [2008/04/02(水) 18:53:30 ID:KzinrGTW] debugを1以上にするとHTMLの一番最後に <!-- 0.0012s --> みたいに、生成時間?のコメントがつくんですけど これを付けないようにするにはどうすれば良いんでしょうか? debugは1にしておきたいです。
564 名前:563 mailto:sage [2008/04/02(水) 18:58:51 ID:???] あ、webroot/index.php にありました。
565 名前:nobodyさん mailto:sage [2008/04/02(水) 19:00:37 ID:???] cakephpで作られたオープンソースみても モデルで書かれてる処理はバリデータ関係の関数しかないんだけど code.google.com/p/openflp/
566 名前:nobodyさん mailto:sage [2008/04/02(水) 19:00:38 ID:???] >>564 Do not changeって書いてあるけどねw
567 名前:516,522 [2008/04/02(水) 19:01:23 ID:Ldo05SB7] ん?なんかいろいろゴチャゴチャしてきたけど、結局俺が主張してたことは正しかったのか・ 「複雑な一連の処理」とかビジネスロジックとかって、たとえば俺の場合は ・@日足の株価を取得してRSIを計算する ・A与えられた条件引数に該当する銘柄の証券コード配列を取得(スクリーニング) ・B現在の株価を受け取り、あらかじめ計算しておいた目標価格の条件を満たすか判別 ⇒・更に条件を満たしていれば、買い/売り注文をWEBサービスに投げる処理も「証券会社モデル」(仮称)というDBと連携しないモデルを作成して、HTTP(S)で注文するメソッドを書いてる。 ・C現在の株価を取得する(楽天証券のRSSをDDE接続経由で呼び出すモジュールを別途使用) みたいなアプリが持つほとんどの主要処理を言ってて、これらをモデル(またはビヘイビア)に記述するべきと思うのです。 逆に言えばコントローラは、 ・Cの「現在の株価を取得する」メソッドからの返し値をそのままB「株価と目標を評価し、注文する」メソッドに引渡し仲介する ・ビューからリクエストがあった@などの計算処理をモデルメソッド@に引き渡す ・スクリーニング対象銘柄の証券コードリストを取得し、そのままAのスクリーニングメソッドに引き渡す。 くらいのことしかしていない。人間の世界でいうと「仲介人」かと。
568 名前:nobodyさん mailto:sage [2008/04/02(水) 19:06:54 ID:???] >>565 お前の目は節穴か・・・ ってかこのソースあまりいいとは思えないな
569 名前:nobodyさん mailto:sage [2008/04/02(水) 19:08:08 ID:???] OpenFLP Rails 製のオープンソース版 Fastladder モデル 382steps コントローラー 910steps コントローラーに処理書きまくってるんですが。。。
570 名前:nobodyさん mailto:sage [2008/04/02(水) 19:09:00 ID:???] じゃあ本家railsのソースコードみせてやる
571 名前:nobodyさん mailto:sage [2008/04/02(水) 19:11:13 ID:???] コントローラに処理を詰め込みが正論か非か オープンソース見れば、すぐわかることだからな
572 名前:nobodyさん mailto:sage [2008/04/02(水) 19:15:29 ID:???] オープンソースといってもその質はピンキリだから > じゃあ本家railsのソースコードみせてやる おいっ! railsはフレームワークだ。 もともとビジネスロジックは含まれてない!
573 名前:nobodyさん mailto:sage [2008/04/02(水) 19:18:52 ID:???] >>567 全部コントローラで出来るし それをCakePHPでやる意味がわからんw
574 名前:516,522 [2008/04/02(水) 19:46:05 ID:Ldo05SB7] >>573 あー、「全部コントローラで出来るし」って言ってる時点でプロフェッショなるじゃないことが確定www 議論しても理解できないんだろうな、「できる/できない」ということと「(プロとして)やるべき/べからず」 といった本質的な点をwww コントローラでも全部やろうと思えばできることくらいわかっとるわいwww
575 名前:nobodyさん mailto:sage [2008/04/02(水) 19:58:32 ID:???] >>574 CakePHPでやることじゃないことは確かwww
576 名前:nobodyさん mailto:sage [2008/04/02(水) 21:14:45 ID:???] ビジネスロジックはモデルに集約すべき 議論としては面白い 俺もその辺気になってた まあ俺はbakeしたコードの拡張から入ったクチだから全部controllerに書いちゃうけどなwww
577 名前:nobodyさん mailto:sage [2008/04/02(水) 21:37:43 ID:???] >>576 俺もコントローラに書いてしまったけど、 作り続けていくうちに、なんか無理が出てくるんだよ。 なんでこんなに作りづらいんだ?って思っていたときに このスレにあった、ケーキの絵。あれで悟りを開けた気がする。 あぁモデル中心でやればいいんだって。
578 名前:nobodyさん mailto:sage [2008/04/02(水) 21:58:22 ID:???] >>577 その絵ってどれ?
579 名前:nobodyさん mailto:sage [2008/04/02(水) 21:58:46 ID:???] >>562 モデルに書けって言うけど、何を書くの? 関数で書けばいいの?モデル内のメソッドとして? >>565 の言うとおり、実例も無いし具体的なメリットが分からない。 今のところテストが楽って事はなんとなく分かった。
580 名前:nobodyさん mailto:sage [2008/04/02(水) 22:16:06 ID:???] >>578 これの3ページ目 cakephp.org/files/OCPHP.pdf
581 名前:nobodyさん mailto:sage [2008/04/02(水) 22:19:41 ID:???] > 関数で書けばいいの?モデル内のメソッドとして? モデル = ビジネスロジック用のクラス なんだから、言うまでも無くメソッドだろ
582 名前:nobodyさん mailto:sage [2008/04/02(水) 22:22:03 ID:???] >>580 ありがとう,でもコントローラーよりモデルに重点おけよという一言で済む話かw
583 名前:nobodyさん mailto:sage [2008/04/02(水) 22:26:19 ID:???] >>581 そうすると、どう幸せになれるわけ?
584 名前:nobodyさん mailto:sage [2008/04/02(水) 22:27:49 ID:???] >>583 どう幸せになるかではなく、 どう幸せになりたいか。 貴方はプログラミングする上で、どうなったら幸せだと感じる?
585 名前:nobodyさん mailto:sage [2008/04/02(水) 22:57:59 ID:???] railsはコントローラーに重点を置くようになってるのではなぜ?
586 名前:nobodyさん mailto:sage [2008/04/02(水) 23:14:04 ID:???] >>574 自分の安価間違ってね?516と522で筋が通ってない
587 名前:nobodyさん mailto:sage [2008/04/02(水) 23:53:19 ID:???] >>585 railsでもモデルが一番重要なものですよ。
588 名前:nobodyさん mailto:sage [2008/04/03(木) 00:17:09 ID:???] モデルが一番重要なんてCakePHPだけの話 松本に話したら鼻で笑われたよ
589 名前:nobodyさん mailto:sage [2008/04/03(木) 00:38:13 ID:???] 松本といっても鼻の長いゾウをキャラクターにしている会社の松本だけどなw
590 名前:nobodyさん mailto:sage [2008/04/03(木) 00:48:42 ID:???] でもキリンさんも好きなんだろ?
591 名前:nobodyさん [2008/04/03(木) 10:10:52 ID:Z1Ohe4yI] ビヘイバ話はおわったのか?
592 名前:nobodyさん mailto:sage [2008/04/03(木) 11:26:08 ID:???] Model は特定の環境に依存しない処理を行う部分である。
593 名前:nobodyさん mailto:sage [2008/04/03(木) 12:10:16 ID:???] たとえばの話なんですが、 1.フォームから画像ファイルをアップロード 2.アップロード結果・画像ファイルの不正検知 3.2が成功時、元画像名をmd5したものをuploadsフォルダに保存 4.3のファイル名をimage_fileカラムに格納 という一連の処理があったばあい、 今現在はコントロールとコンポーネントに書いてますが、 モデルとビヘイビアに書くとしたら、 2->バリデータに記述 3->ビヘイビア 4->モデル という感じなんでしょうか?
594 名前:nobodyさん mailto:sage [2008/04/03(木) 12:26:23 ID:???] ビヘイビアて1.2からだろ、 最初から無いってことは必要性が薄いてことだよな
595 名前:nobodyさん mailto:sage [2008/04/03(木) 12:32:04 ID:???] ソースが読みやすければコントローラーで全部書いてもいいし モデルに書いて読みにくくなるなら、書かない方がいい 結局はソースを読みやすくするために分けてるだけの話
596 名前:nobodyさん mailto:sage [2008/04/03(木) 12:32:23 ID:???] 画像アップロードできるビヘイビアあるよ。 正確には画像を保存できるビヘイビアだけどね bakery.cakephp.org/articles/view/actas-image-column-behavior
597 名前:nobodyさん mailto:sage [2008/04/03(木) 12:50:28 ID:???] 結局はソースを見やすくする為にある。 一番見やすいソースとは、なるべく何も書かないこと。 画像をアップロードして保存というのは、本質的には テーブルに画像フィールドを作ってそこに格納することと変わらない。 だからフィールド追加作業以外は、一切処理を変更しないで 作れるというのが一番理想的。 ビヘイビアを使えば、>>596 のようにActsAsにわずかなフィールド情報を 設定して終わりだけど、その他の方法でここまでスマートに作れるかな?
598 名前:593 mailto:sage [2008/04/03(木) 13:32:44 ID:???] >>596-597 ありがとうございます。 こりゃ1.2にチャレンジしなきゃだな
599 名前:nobodyさん [2008/04/03(木) 13:49:15 ID:Z1Ohe4yI] >ビヘイビアて1.2からだろ、 >最初から無いってことは必要性が薄いてことだよな 正確には1.1の頃からビヘイビアのディレクトリは用意されてたんだよな。 おそらく必要性はあったのだけど、1.1.xのステイブル版までに実装できなかっただけなのでは?
600 名前:nobodyさん mailto:sage [2008/04/03(木) 14:22:02 ID:???] railsにはビヘイビア相当になるものが無いんだが、どうして
601 名前:nobodyさん mailto:sage [2008/04/03(木) 15:14:18 ID:???] ビヘイビアてベネズエラにいる俺の愛人と同じ名前だ
602 名前:nobodyさん mailto:sage [2008/04/03(木) 15:38:42 ID:???] >>600 Rubyではmixinという言語機能でビヘイビア相当のことが出来るから。
603 名前:nobodyさん mailto:sage [2008/04/03(木) 17:41:48 ID:???] マニュアル»CakePHPによる開発»Models»Introduction book.cakephp.org/ja/view/67/introduction > Model behaviors provide a way to mix in functionality へぇ、behaviorsはmix-in的な機能を提供するものだったんだ。なるほど。
604 名前:nobodyさん mailto:sage [2008/04/03(木) 18:10:28 ID:???] >>603 きちんとした日本語訳サイトあるのに。。。
605 名前:nobodyさん mailto:sage [2008/04/03(木) 18:23:11 ID:???] >>604 どこに?
606 名前:nobodyさん [2008/04/04(金) 20:03:22 ID:GG6uDHIa] わっふるわっふる
607 名前:nobodyさん mailto:sage [2008/04/05(土) 04:54:50 ID:???] cakeでのMC棲み分け例としては以下がありますよね。 個人的にはいい感じだと思いましたが、どうでしょう? CakePHPを使ったMVC設計のベストプラクティス ttp://www.sooey.com/journal/2008/03/26/717/
608 名前:nobodyさん mailto:sage [2008/04/05(土) 05:21:49 ID:???] MVCモデルのMが重要なのはデータ加工の多いWEBだけのはなしであって MVCモデル全般的な考えではない
609 名前:nobodyさん mailto:sage [2008/04/05(土) 05:24:58 ID:???] データをあまり使う必要のないWINアプリを MVCモデルでわけた場合はCが中心となる
610 名前:nobodyさん mailto:sage [2008/04/05(土) 09:45:41 ID:???] Web用のフレームワークのスレで何言ってんだこいつw
611 名前:nobodyさん mailto:sage [2008/04/05(土) 15:00:48 ID:???] MVCのVが重点となるソフトをあげてみよ
612 名前:nobodyさん mailto:sage [2008/04/05(土) 15:07:51 ID:???] rails発のMVCモデルはMがDBと密接な関係であるが 最強のモデルとは思っていない。 最適なモデル構造というには、まだまだ完成度が低いとrails作者は言っている
613 名前:nobodyさん mailto:sage [2008/04/05(土) 15:49:00 ID:???] >>607 面白いけど これ通りに書いたら一覧性下がりそうだな 大規模なら修正には強くなりそうだね まずは体に叩き込んでみるのがいいのか
614 名前:nobodyさん mailto:sage [2008/04/05(土) 20:57:16 ID:???] >>611 > MVCのVが重点となるソフトをあげてみよ 静的なウェブページ
615 名前:nobodyさん mailto:sega [2008/04/07(月) 17:32:08 ID:???] ゆくゆくはcake使いたいけどあと8時間くらいしか時間ないし 今は勉強してる暇も無いからとりあえず平で書く ってときに、最低限これだけ守ってコード書いとけば あとでcakephpを使いたくなってもまあなんとかなるよ という ポイントを教えて
616 名前:nobodyさん mailto:sage [2008/04/07(月) 17:50:23 ID:???] Cake同様のライブラリが揃ってるってなら、そんな事も可能だと思うが・・。 無理じゃね
617 名前:nobodyさん mailto:sage [2008/04/07(月) 18:06:48 ID:???] データベースの主キーはIDだけにしておく
618 名前:nobodyさん mailto:sage [2008/04/07(月) 18:28:13 ID:???] それはコードなんだろうか とにかく規約ぐらい把握しないと無理だよね 結局出来るのはDBの設計ぐらいじゃないかと コードも処理部分は多少使いまわせるだろうけど
619 名前:nobodyさん [2008/04/09(水) 22:36:27 ID:0zi6cM/k] CakePHP内でfindAll、findAllByを使っていますが、重いのでチューニングできないかと 考えています。 それで、実際に発行されているSQLと、可能であればアクセスパスを確認したいの ですが、なにか方法がありますでしょうか。
620 名前:nobodyさん mailto:sage [2008/04/09(水) 23:44:43 ID:???] デバッグモードを2に変更。実行したsqlが見れます
621 名前:619 [2008/04/10(木) 00:04:23 ID:ysAxvq3P] >>620 確認できました! ありがとうございます。
622 名前:nobodyさん mailto:sage [2008/04/10(木) 10:23:53 ID:???] Model->query()で以下のようなSQLを発行すると $sql = <<<EOF SELECT `Foo`.`id`, SUM(`Bar`.`hoge`) FROM `bars` AS `Bar` LEFT JOIN `foos` AS `Foo` ON (`Bar`.`foo_id` = `Foo`.`id`) WHERE `Foo`.`id` IN (1, 2, 3, 4, 5) GROUP BY `Foo`.`id` EOF; 連想配列の添字がおかしくなるのですが、回避はできないのでしょうか array( '0' => array( 'Foo' => array('id' => ***) '0' => array('SUM(`Bar`.`hoge`)' => ***) ←ここ ) . . . )
623 名前:nobodyさん mailto:sage [2008/04/10(木) 10:42:01 ID:???] >>622 なんかqueryなんか使わないで、find()で出来そうな気がするんだが? queryだとRDBMSごとの違いを吸収できないことがあるのでお勧めしない。 んで、試してないんで間違っている可能性が高いんだが $sql = <<<EOF SELECT `Foo`.`id`, SUM(`Bar`.`hoge`) as `Bar`.`hoge` 以下同じ じゃだめかな? 内部的には帰ってくるデータのフィールド名がどうなっているかを判断して 連想配列に入れているようだから、SUM関数とか使うとフィールド名が CakePHP的に想定外になる。それが原因じゃないかな? ちなみに、この、 as `Bar`.`hoge`の文字列の部分がRDBMSによって違うので 考えなしに使ってしまうと、RDBMSごとの違いを吸収できなくなる。 (たしかPostgreSQLだとas Model__Field) もちろん、MySQLにだけ対応していればいいのなら、問題ないけどね。
624 名前:nobodyさん mailto:sage [2008/04/10(木) 11:29:33 ID:???] >>623 レスありがとうございます alias噛ませる方法は私も試してみたのですが FROM `bars` AS `Bar`の宣言と被っているためエラーが返ってきます。 hasManyで繋がっている集計先テーブルの条件指定なども追加したい場合 CakePHPの作法だとどのようにするべきなのでしょうか?
625 名前:nobodyさん mailto:sage [2008/04/10(木) 11:53:32 ID:??? BE:39571564-2BP(2)] 参照の参照がうまくいかない。 たとえば、PostのViewにユーザ名だけでなく、そのユーザが所属するグループ名を表示したい場合、どうすればいいんだろう? Post.id Post.user_id−参照→User.id ←取得−User.username User.group_id−参照→Group.id ←取得−−−−−−−−−−− Group.groupname User.usernameを表示する場合は、$post['User']['username']でいけるっぽいけど、 じゃあ、そのユーザのグループ名はどうやって取得すればいいんだろう? 他にも、グループ名のリンクをクリックしたときに、そのグループに所属するユーザ (User.group_idの値がGroup.idの値と等しいユーザ)User.usernameの一覧を作成するときとか どのように書けば良いんだろうか? MVCにしろ、SQLにしろ始めたばっかで全然わからないや。
626 名前:nobodyさん mailto:sage [2008/04/10(木) 15:04:31 ID:???] >>625 Post -> User -> Group という順番に適切なアソシエーションが設定されていれば、芋づる式にデータは取ってこれる。 やってるけど分からないなら>>620 が書いているように、デバッグモードをonにしたほうがいい。 その質問の仕方だと、何をどこまでやって分からないのか分からない。
627 名前:nobodyさん mailto:sage [2008/04/10(木) 22:22:07 ID:???] >>624 とりあえず、 SUM(`Bar`.`hoge`) as `sumhoge` これだと、 Array([0] => Array([0] => Array([sumhoge] => 6))) となるよ。 まとめて書くなら、 $query = array( 'conditions'=>array( 'Foo.id'=>array(1,2,3,4,5), '1=1 GROUP BY Foo.id' ), 'fields'=>array('Foo.id','SUM(Bar.hoge) as sumhoge') ) $this->Bar->find('all',$query); って感じかな
628 名前:nobodyさん mailto:sage [2008/04/10(木) 22:25:44 ID:???] まあ、SUMつかったせいで、 どこのモデルのデータかという情報が消えてしまい、 0という名前のモデル名になるってだけで おかしいわけじゃないんだけどな。 今回はBar.hogeのSUMだからモデル名はBarになるべきだと 思うかもしれないけど、SUM(`Foo`.`hoge` + `Bar`.`hoge`) という 書き方だって出来るわけだし。
629 名前:nobodyさん mailto:sage [2008/04/11(金) 00:29:36 ID:???] なるほどなんで0になるんだとか悩んでた しかし、扱いにくいのはたしかなんだよね
630 名前:nobodyさん mailto:sage [2008/04/11(金) 01:18:44 ID:???] BakeとかBakeryとかCheeseCakeなんていう、楽しげな製菓製パン用語の中にあって、 Scaffoldなんていう土建屋みたいなネーミングはいかがなものかねぇ。 いくらRoRのパクリとはいえ、違う名前でもよかったんじゃないかな。 なぁんて、チラシの裏w。
631 名前:nobodyさん mailto:sage [2008/04/11(金) 01:32:12 ID:???] じゃあスポンジケーキ?