トップページ⇒php
1001コメント324KB

【PHP】フレームワーク CakePHP 3ホール目【本命】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/14(金) 15:16:00ID:HF9x5ODX
http://www.cakephp.org/

10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/

マニュアル日本語化
http://www.cakephp.jp/doc/

日本語フォーラム
http://cakephp.jp/modules/newbb/

あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/

CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/

【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0367nobodyさん2008/03/26(水) 21:55:41ID:???
>>364
この人、確実に嫌われてるだろうな、プログラマに。
03683362008/03/27(木) 00:00:03ID:d9lPRB8S
>>336です
意外と盛り上がっててびっくり…
0369nobodyさん2008/03/27(木) 01:42:38ID:???
>>359

イラレで仕様書は普通。
03703362008/03/27(木) 02:53:28ID:d9lPRB8S
>>369
マジかよ。それなんてイラレ?
0371nobodyさん2008/03/27(木) 11:48:14ID:???
たとえばフォームにある省略可能な数値型の項目に
値を省略して(空文字で)データベースに保存した場合空文字でINSERTされる。

このときのどう保存されるか動作はデータベース依存であり
MySQLは0になり、PostgreSQLはエラーになる。

https://trac.cakephp.org/ticket/4233
チケットが出ていたみたいだが、修正無しでクローズ?

これ直る見込みないんかいな。確かに空文字とNULLは違うものだが
「データベースの省略可能な数値フィールド」ってのは
数値とNULLしか入れられないんだよね。

どうせNULLが入ったフィールドをModelから読み込むと
空文字になるんだし(あってるよね?)
NULLに変換して保存したほうが実用的だと思うんだけどなぁ。

データベース間の違いも吸収したほうがいいし。

beforeSaveあたりで書き換えるか・・・
0372nobodyさん2008/03/27(木) 15:25:42ID:???
>>371
それはCakePHPに限ったことでは無いから死んでこい
0373nobodyさん2008/03/27(木) 15:27:34ID:???
>>371
そんなどうでもいい作業するくらいなら
コンビニでバイトするよ
0374nobodyさん2008/03/27(木) 17:50:07ID:???
CakePHPのアソシエーションでBelongsToやhasOneを渡り歩いて
広範囲のテーブルから値を持ってくるにはどうすればいいんでしょうか

SQLならLEFTJOINを繋げて行けば済むのですが
単純にrecursiveを増やしていくとクエリの量が異常に増えて困っています
0375nobodyさん2008/03/27(木) 19:31:16ID:???
最近低レベルの煽りしか返さない奴がいるなウザイ。
どうせ同一人物だろうからトリップつけてくれ。削除すっからさ。
0376nobodyさん2008/03/27(木) 19:48:23ID:???
>>375
低レベルの質問しかないから仕方ないこと
0377nobodyさん2008/03/27(木) 19:51:40ID:???
>>374
リファレンスみろよ
こんなとこで聞くなカス
0378nobodyさん2008/03/27(木) 20:14:15ID:???
>>376-377 だからトリップつけろってw
0379nobodyさん2008/03/27(木) 21:54:01ID:???
>>377
アソシエーションが直接繋がっている関係なら資料は山ほどあるのですが
例えば4テーブル先まで繋がっているデータを手繰り寄せてくる場合、デバッグ情報を見ると
一旦findで取得してきた配列をforeachで回して一つ一つまたfindを使っているように見えます
結果、データ自体は取ってこれるもののSQLの発行数が異常な量になってしまいとても使う気になれません

SQLの発行を抑えつつもアソシエーションを柔軟に広げるためには、自前でqueryを使うしかないのでしょうか?
0380nobodyさん2008/03/27(木) 22:01:13ID:???
ユニットテストでfixturesの機能使っている人いる?

var $fixtures = array(〜〜〜);

こんな感じでfixturesをしているわけだけどさ、
なんかテーブルの生成のタイミングとか変じゃない?

テストを単体で実行すると問題なく動くんだけど、
すべて実行するとテーブルが無いとか言われることがある。

0381nobodyさん2008/03/27(木) 23:06:17ID:???
>>370
adobe社のイラレだと思うけど。

>>375

わかる。人をバカにしてばっかだよな。あおってるやつ。
見てて気分悪い。

>>376 >>377
リファレンス見てわかるならそのURL教えてあげようよ。
しかも、聞いてる 374 はある程度知識あると思うよ。
もうちょっと人を思いやる気持ちを持とうよ。
0382nobodyさん2008/03/27(木) 23:10:00ID:???
>>372
まず、おまえがシネ
0383nobodyさん2008/03/27(木) 23:23:59ID:???
>>379
質問の内容があまりにも素人すぎ
CakePHPばかにしてんのか?


0384nobodyさん2008/03/27(木) 23:25:34ID:???
誰も馬鹿にしてないから答えろよw
0385nobodyさん2008/03/28(金) 00:13:02ID:???
人をバカにすることで自分が上に立ったような感覚を味わいたいんだろうな
残念なやつが多い

>>379
その4テーブルはどんなリレーションなの?
で、今はどんなアソシエーションを記述してんの?
もしかしたらDB設計が悪いという可能性もある。
0386nobodyさん2008/03/28(金) 00:51:53ID:???
>>385
各フレームワークの評価目的でプロトタイプを作っていますので
特定のテーブルの再設計で問題を解決するアプローチでは応用範囲が非常に限られてしまいます
申し訳ありませんがCakePHP側での解決を求めています

例えばごく単純にモデルが
A→B→C→D
とbelongsToで数珠繋ぎにアソシエーションが設定されている場合
AのリストにB〜Dのデータを動的に付加して取得したいとすると
どのような指定をすればよいのでしょうか

SQLならJOINをただ書き連ねていけばいいのですが
0387nobodyさん2008/03/28(金) 01:28:45ID:???
>>386
CakePHPさわってどれくらい?
あまりにも初心者的な質問やめてくれる
0388nobodyさん2008/03/28(金) 01:30:56ID:???
スレ分けて欲しいな。CakePHP初心者スレ作ってよ
0389nobodyさん2008/03/28(金) 01:42:40ID:???
>>386
初心者が他人の力借りて簡単にCakePHP評価しようなんて
CakePHPなめすぎだろ?
自分で死ぬ思いでググれボケ
0390nobodyさん2008/03/28(金) 02:37:39ID:???
>>386
できそうにない。

https://trac.cakephp.org/ticket/2931
上で同じようなこと言ってたけど対応なしにcloseされた模様。
https://trac.cakephp.org/ticket/4277
上も同様のことを言ってる。3週間ほど前。

>>377 >>383 >>387 >>388 >>389
俺もこれの具体的な解決方法を知りたいです。どうか教えてください。
0391nobodyさん2008/03/28(金) 02:57:36ID:???
>>390
CakePHPの知識全くないくせに英語力を自慢がしたいの?
0392nobodyさん2008/03/28(金) 03:06:49ID:???
>>390
>>371
ここにいる馬鹿どもが、みんな英語わかると思ってんのか?w
さりげなくバカにしてるだろ
0393nobodyさん2008/03/28(金) 03:20:48ID:???
>>390
今調べて出来そうにないって。こういうケースはじめてなの?
経験浅すぎじゃね。1つのサイトをCakePHPで完成させたことないやろ
0394nobodyさん2008/03/28(金) 03:22:38ID:???
>>391
いや、これに関しての日本語の情報がなかなか見つからなかったから英語の記事を探さざるを得なかっただけ。
で、CakePHPの知識がある人はこれをどうやって解決してるんでしょうか?
0395nobodyさん2008/03/28(金) 03:31:35ID:???
>>390
どうして、できそうにないか具体的に日本語で説明しろ。わかったな命令だ
0396nobodyさん2008/03/28(金) 03:56:27ID:???
このスレ、なんか冗談だと思えるくらい殺伐としてんな w
0397nobodyさん2008/03/28(金) 06:59:33ID:???
>>396
何でだかアンチが混じっている。
で、cakePHPは重いとか、質問者を叩いたり。
無視推奨。

つか、アンチしてる人、cakePHPを無視すればいいのにね。
0398nobodyさん2008/03/28(金) 08:46:16ID:???
英語のサイト貼りつけて叩かれるのは初めて見たw
日本のサイトで分からなければ、海外サイトくらい見るだろ。

分からなければWeb翻訳すればいいんだしな
0399nobodyさん2008/03/28(金) 09:18:10ID:???
粘着気質で知性もないとか救いようがないな。
トリップの付け方も知らないらしいし、ほんと終わってんな。w
0400nobodyさん2008/03/28(金) 09:20:55ID:???
なんだこの流れ
とてつもないバカが何人かいるな
0401nobodyさん2008/03/28(金) 09:29:46ID:???
>>390
まさしくそのtickets通りです
CakePHPは隣り合ったアソシエーション間ではJOINを繋いでSQLワンコールに最適化してくれますが
それ以上のテーブルをまたいだ関係を持とうとすると途端にクエリ量が増えてしまいます

個人的にrecursiveでアソシエーションの深度を指定する考え方は
好感が持てるのですが、負荷の高さを考えると使用をためらわざるを得ません

サブクエリをインテリジェントに挿入しろとは言いませんが
今回の様な使用頻度の高いと思われる(かつ、割と実装の想像しやすい)処理ならば
既に解決された方がいらっしゃるのかと質問に至りました

--
先ほどContainableBehaviorを試してみましたがクエリ量は変わりませんでした
やはりコアに直接手を加えないといけないようですね(´・ω・`)
0402nobodyさん2008/03/28(金) 10:01:46ID:???
A→Bのクエリ発行したときに
モデルにB→Aのアソシエーションも記述してあると
B→Aのクエリも発行される
だから
A→B→C→D のようなのをそのままやっちゃうと
えらいことになる

だから、いらいないアソシエーションはunbindModelでぶった切る

あと、1.2だと発行クエリが1.1より最適化されている
(つまり、少なくなってるってこと)
0403nobodyさん2008/03/28(金) 10:11:39ID:???
>>397
明らかにアンチじゃない奴のほうがたち悪いぞ。質問者叩いてるのもそう。

>>402
>>401の問題解決にはならないんじゃない。B->Aのアソシエーションがなくても起こるから。

>>401
DBにview作れば早いと思うよ。
0404nobodyさん2008/03/28(金) 10:15:32ID:???
質問があまりにもバカすぎて・・・
レベル低いよな。
ここでアフォみたいな質問してるやつは
CakePHPでサイト構築したことあるのかと聞きたいよ

0405nobodyさん2008/03/28(金) 10:19:27ID:???
あまりにもバカみたいな質問にバカみたいな回答が多すぎ
もっと常識レベルでの会話して欲しいな
駄文ばっかで何の役にも立たないよ
0406nobodyさん2008/03/28(金) 10:27:40ID:???
>>405
それそのまま>>405に当てはまるのわかる?
0407nobodyさん2008/03/28(金) 10:30:15ID:???
もっと常識的な質問たのむ
0408nobodyさん2008/03/28(金) 10:36:03ID:???
かわいそうに
0409nobodyさん2008/03/28(金) 10:57:56ID:???
バッチ処理で長くかかる処理をやるのなら話は別だけど
ウェブアプリなんて画面に表示する少ないデータを
表示するだけなんだからJOINしなくてもいいと思うんだけどね。
どうせ複雑なJOINならJOINするのにも負荷かかるわけだし。

ま、パフォーマンスと開発効率のトレードオフ。
どうしても必要なら、モデルに専用の検索メソッドでも作って
自分でクエリー書けばいいんじゃない?
0410nobodyさん2008/03/28(金) 11:00:25ID:???
もっと常識的な質問たのむ
0411nobodyさん2008/03/28(金) 11:03:37ID:q/btZ3WH
アンチがしつこくネガティブキャンペーンするのも
CakePHPが人気になって普及してきた証拠かなぁw

アンチじゃない人はIDだすようにするか?
そうすればID出していない人はアンチってわかるし。
出したら出したで削除できるしw
0412nobodyさん2008/03/28(金) 11:10:07ID:???
アンチを勘違いしてると思うが
いい質問には、マナーをもって接するが
ろくでもないレスばっかりだからな
0413nobodyさん2008/03/28(金) 11:13:12ID:???
>>411
自治厨乙。
だいたいにして、IDなんていつでも変えれるんだから意味ないじゃん。
0414nobodyさん2008/03/28(金) 11:14:01ID:???
ろくでもないレスは無視するかマナーをもって
訂正を促すのが良い返答の仕方だよ。
0415nobodyさん2008/03/28(金) 11:14:44ID:q/btZ3WH
>>413
やってみなきゃわからないじゃんw
0416nobodyさん2008/03/28(金) 11:17:51ID:???
>>415
どんだけ必死なんだよw
0417nobodyさん2008/03/28(金) 11:57:59ID:anJTbKap
>>409
もちろん速度を重視しなくてはならない場面ならば専用メソッド内でSQLを書きます
しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
フレームワーク自体に手を出して最適化させた方がコスト的にベターかなと思います

>>403
複雑なアソシエーションのパターンが出来上がってる時はView使った方がいいですね
今ふと考え付いたのですが、結合済みの仮想テーブルを作って、それを元に
CakePHP側のモデルを構築するアプローチは面白いかもしれません

#仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
0418nobodyさん2008/03/28(金) 12:20:53ID:???
>>417
負荷を考えるならフレームワークやめろ
CakePHPなんてのは、どうでもいいクライアントに高速納品するための道具てことに気づけよバカ
0419nobodyさん2008/03/28(金) 12:26:48ID:???
>>417
今頃フレームワークの評価とか手を出すとか、どんだけ遅れてんだよ
この業界は進歩が早いの知ってる?
0420nobodyさん2008/03/28(金) 12:43:39ID:???
>>417
> 結合済みの仮想テーブルを作って、それを元にCakePHP側のモデルを構築する
view作ればって言ったのはそういうこと。
面白いかどうかはおいといて、現状の打開策としてはアリかなと思うわけです。

> 仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
このDB依存は仕方ないと割り切ればいいんじゃないかな。割り切れるところだと思うし。
0421nobodyさん2008/03/28(金) 12:49:51ID:???
>>417
やる前にあれこれ聞かずにやってみろよ
こんなとこで解決できれば苦労しねーよクソが
0422nobodyさん2008/03/28(金) 12:53:20ID:???
評価なんてソース解析して自分で実際にサイト構築しないとわからねーよ
やってくうちに想像しない難点が沢山でてくるよ

0423nobodyさん2008/03/28(金) 13:01:42ID:???
>>417
速度重視とか柔軟性考えるならCIにしろや
0424nobodyさん2008/03/28(金) 13:04:47ID:???
CakePHPを最適化させにくいフレームワーク
最適化したいならCIスレにいって、このスレからでていけや
0425nobodyさん2008/03/28(金) 13:28:19ID:???
>>420
0426nobodyさん2008/03/28(金) 13:34:05ID:???
っていうかJOINにならないというのは
どのフレームワークでも同じこと。
CIでもSymfonyでもRubyOnRailsでも同じだよ。

特にCIは最悪だね。いろんな意味で。
ここではすれ違いだから言わないけど。
0427nobodyさん2008/03/28(金) 13:40:13ID:???
>>426
どのフレームワークも同じなら軽量でサクサク動作するCIの方がマシ
0428nobodyさん2008/03/28(金) 13:44:02ID:???
>>417
> しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると

シンプルではないよ。

CakePHPでもその他でもそうだけどO/Rマッピングというのは
従来の表形式の使いづらいリレーショナルデータベースを
高レベルに扱いやすく使えるようにするもの。

リレーショナルデータベースを基本に設計されたものではなく
より理想的なオブジェクト指向風なデータ構造をもとに設計されたもの。
だからいろんな取り出し方ができる出来る柔軟性がある。

たとえば、behaviorでデータ挿入・取り出し時に色んな処理をかませられる。

そういう柔軟性を持たせながらシンプルなSQLに置き換えるのは容易ではない。
不可能な場合すらある。

なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること。一日働いて3万円人件費をかけるのなら、
その3万円でスペックをあげたほうが総合的に考えてメリットが
高いという時代だから、今は。
0429nobodyさん2008/03/28(金) 13:50:03ID:???
CIはデータベースを使わない。使う頻度が少ない場合にはいいけど、
データベースを使う場合、貧弱だよな。

あれならSQL直書きした方がいいってほどメソッドがアホらしいしw
なによりビヘイビアが無いのが一番痛い。
0430nobodyさん2008/03/28(金) 13:50:47ID:???
>>428
なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること

サイトリニューアルなど
既存ユーザーが多数いる自社製品ならパフォーマンスを意識する

0431nobodyさん2008/03/28(金) 13:52:21ID:???
> 既存ユーザーが多数いる自社製品ならパフォーマンスを意識する
マシンスペックを上げろ
0432nobodyさん2008/03/28(金) 13:54:32ID:???
>>429
複雑なアソシエーションはSQL直書きになるんならCIが理にかなってる

0433nobodyさん2008/03/28(金) 13:55:17ID:???
複雑なものじゃなくてシンプルにしようと考えような。
0434nobodyさん2008/03/28(金) 13:55:42ID:???
>>426
symfony(というかpropel)はJOINになる
0435nobodyさん2008/03/28(金) 13:56:08ID:???
>>431
ユーザーが増えるたびに、どんだけマシンが必要になるんだよ
0436nobodyさん2008/03/28(金) 13:56:12ID:???
JOIN使わないで一回一回よんでも
パフォーマンスはたいして変わんないんだけどなw
0437nobodyさん2008/03/28(金) 13:57:04ID:???
>>435
ユーザーが増えると重くなるのはどれでも一緒ですが?

働いていない人は、人件費というコストを計算に入れないからなぁw
まあ、がんばれやw
0438nobodyさん2008/03/28(金) 13:57:54ID:???
>>436
変わるよ あほか
0439nobodyさん2008/03/28(金) 13:57:57ID:???
SQL直書きになる機会が多いならCIがいい
0440nobodyさん2008/03/28(金) 13:58:21ID:???
O/Rというのはリレーショナルデータベースからの
脱却に意味があるというのに、今時SQLなんて低レベルなことやるかよw
0441nobodyさん2008/03/28(金) 13:58:54ID:???
>>437
ずっと開発してるわけじゃねーからw
人件費とか1回ぽっきりやん
0442nobodyさん2008/03/28(金) 14:00:15ID:???
複雑なSQLならO/Rマッピング使えないじゃん
今のCakePHPなら
だったらCIでSQL直書きが最高よ
0443nobodyさん2008/03/28(金) 14:03:25ID:???
>>437
重くなりかたが異なってくるんですが?

1回で済む処理を2回のクエリで行ってるとアクセス数が増えたときにクエリ発行数が大きく変わることがわかんない?
ほんとにプログラマなのか?まぁ、がんばれや
0444nobodyさん2008/03/28(金) 14:05:37ID:???
ぷw 頭固いな。mixiの話とかしらんのかいな

mixiでは”高負荷に耐えるためにJOINを使っていない”んだよ。

http://www.google.co.jp/search?hl=ja&rlz=1T4GGIH_jaJP221JP221&q=MIXI+MYSQL+JOIN+%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&lr=

0445nobodyさん2008/03/28(金) 14:07:29ID:???
>>442
使えていますが? JOINが使われないってだけでしょうが。

パフォーマンスに問題が無い場所で、
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHPと、
SQLを書くのと同等の手間をかけなければならないCIでは
どちらが優れているかは言うまでも無く、CakePHPですね。
0446nobodyさん2008/03/28(金) 14:08:18ID:???
>>441
マシンスペックを上げるのも一回ぽっきりですが?
0447nobodyさん2008/03/28(金) 14:09:13ID:???
ビヘイビアがない時点でCIは糞w
0448nobodyさん2008/03/28(金) 14:11:24ID:???
>>445
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP

group byとかどうやんの?
0449nobodyさん2008/03/28(金) 14:12:45ID:???
>>445
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP

この発言無理がありすぎやろw
0450nobodyさん2008/03/28(金) 14:13:42ID:???
>>444
あのさ、読解力なさすぎ。
「高負荷に耐えるためにJOINを使っていない」とは書いてない。
0451nobodyさん2008/03/28(金) 14:14:14ID:???
結局アンチはいつものCI厨だったなw
0452nobodyさん2008/03/28(金) 14:15:24ID:???
>>450
ではJOINを使わない理由になんて書いていますか?言ってみてください。
0453nobodyさん2008/03/28(金) 14:17:30ID:???
>>452
スケールするためにデータベースを分割し、JOINが使用できなくなったから。
0454nobodyさん2008/03/28(金) 14:20:13ID:???
スケールとはパフォーマンスをあげるということです。
0455nobodyさん2008/03/28(金) 14:21:44ID:???
うん。だから?
0456nobodyさん2008/03/28(金) 14:22:38ID:???
>>455
おまえの負けてことだよ
0457nobodyさん2008/03/28(金) 14:24:15ID:???
>>456
あからさまにバカだな。論理的に考えられないんだな。
0458nobodyさん2008/03/28(金) 14:24:38ID:???
>>447
1.1使ってる人は真性なる糞ですね
0459nobodyさん2008/03/28(金) 14:25:14ID:???
高負荷に耐えられるパフォーマンスを作り出す為に、
データベースを分割してJOINが使用できなくなった。

負荷を考えるのなら、JOINなんかするより、
マシンに投資してデータベースを分割(当然マシンも増えているはず)して
アプリケーションで行ったほうがいいということです。
0460nobodyさん2008/03/28(金) 14:28:55ID:???
>>457
さっきまでパフォーマンスの話してたやろうが
論理的な会話してないのお前だろw
0461nobodyさん2008/03/28(金) 14:31:33ID:???
結局CIが最強てことじゃんか
0462nobodyさん2008/03/28(金) 14:37:17ID:???
CIはフレームワークを使っているとは思えないほど開発工数がかかる。

データベース部分は、SQLの単語(selectやfromやwhere)を
それぞれメソッドに置き換えて実行しないといけない。
なんとビックリw

だから糞。
0463nobodyさん2008/03/28(金) 14:38:23ID:???
わろたw

$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);

$query = $this->db->get();
0464nobodyさん2008/03/28(金) 14:38:41ID:???
>>459
ただ、「マシンに投資してデータベースを分割(当然マシンも増えているはず)して」が始めからできるわけじゃないんだよね。
だからSQL発行数も含め、パフォーマンスには常に気を遣うわけで。
mixiが今はソフトウェア側でパフォーマンスを気にしてないかっていったらそんなことはないし。

>>460
パフォーマンスの話してるよ。何言ってんの?
もう面倒だからお前いいよ。
0465nobodyさん2008/03/28(金) 14:40:13ID:???
だからパフォーマンスを重視するところだけ
最適化して、あとは楽で速いコーディングをすればいいじゃんか。

パフォーマンスの基礎だよ?
0466nobodyさん2008/03/28(金) 14:41:27ID:???
>>463
これいいね。わかりやすい構文だ
CakePHPの
find(null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,)
これに比べれば天と地に差
■ このスレッドは過去ログ倉庫に格納されています