08/03/27 01:42:38
>>359
イラレで仕様書は普通。
370:336
08/03/27 02:53:28 d9lPRB8S
>>369
マジかよ。それなんてイラレ?
371:nobodyさん
08/03/27 11:48:14
たとえばフォームにある省略可能な数値型の項目に
値を省略して(空文字で)データベースに保存した場合空文字でINSERTされる。
このときのどう保存されるか動作はデータベース依存であり
MySQLは0になり、PostgreSQLはエラーになる。
URLリンク(trac.cakephp.org)
チケットが出ていたみたいだが、修正無しでクローズ?
これ直る見込みないんかいな。確かに空文字とNULLは違うものだが
「データベースの省略可能な数値フィールド」ってのは
数値とNULLしか入れられないんだよね。
どうせNULLが入ったフィールドをModelから読み込むと
空文字になるんだし(あってるよね?)
NULLに変換して保存したほうが実用的だと思うんだけどなぁ。
データベース間の違いも吸収したほうがいいし。
beforeSaveあたりで書き換えるか・・・
372:nobodyさん
08/03/27 15:25:42
>>371
それはCakePHPに限ったことでは無いから死んでこい
373:nobodyさん
08/03/27 15:27:34
>>371
そんなどうでもいい作業するくらいなら
コンビニでバイトするよ
374:nobodyさん
08/03/27 17:50:07
CakePHPのアソシエーションでBelongsToやhasOneを渡り歩いて
広範囲のテーブルから値を持ってくるにはどうすればいいんでしょうか
SQLならLEFTJOINを繋げて行けば済むのですが
単純にrecursiveを増やしていくとクエリの量が異常に増えて困っています
375:nobodyさん
08/03/27 19:31:16
最近低レベルの煽りしか返さない奴がいるなウザイ。
どうせ同一人物だろうからトリップつけてくれ。削除すっからさ。
376:nobodyさん
08/03/27 19:48:23
>>375
低レベルの質問しかないから仕方ないこと
377:nobodyさん
08/03/27 19:51:40
>>374
リファレンスみろよ
こんなとこで聞くなカス
378:nobodyさん
08/03/27 20:14:15
>>376-377 だからトリップつけろってw
379:nobodyさん
08/03/27 21:54:01
>>377
アソシエーションが直接繋がっている関係なら資料は山ほどあるのですが
例えば4テーブル先まで繋がっているデータを手繰り寄せてくる場合、デバッグ情報を見ると
一旦findで取得してきた配列をforeachで回して一つ一つまたfindを使っているように見えます
結果、データ自体は取ってこれるもののSQLの発行数が異常な量になってしまいとても使う気になれません
SQLの発行を抑えつつもアソシエーションを柔軟に広げるためには、自前でqueryを使うしかないのでしょうか?
380:nobodyさん
08/03/27 22:01:13
ユニットテストでfixturesの機能使っている人いる?
var $fixtures = array(~~~);
こんな感じでfixturesをしているわけだけどさ、
なんかテーブルの生成のタイミングとか変じゃない?
テストを単体で実行すると問題なく動くんだけど、
すべて実行するとテーブルが無いとか言われることがある。
381:nobodyさん
08/03/27 23:06:17
>>370
adobe社のイラレだと思うけど。
>>375
わかる。人をバカにしてばっかだよな。あおってるやつ。
見てて気分悪い。
>>376 >>377
リファレンス見てわかるならそのURL教えてあげようよ。
しかも、聞いてる 374 はある程度知識あると思うよ。
もうちょっと人を思いやる気持ちを持とうよ。
382:nobodyさん
08/03/27 23:10:00
>>372
まず、おまえがシネ
383:nobodyさん
08/03/27 23:23:59
>>379
質問の内容があまりにも素人すぎ
CakePHPばかにしてんのか?
384:nobodyさん
08/03/27 23:25:34
誰も馬鹿にしてないから答えろよw
385:nobodyさん
08/03/28 00:13:02
人をバカにすることで自分が上に立ったような感覚を味わいたいんだろうな
残念なやつが多い
>>379
その4テーブルはどんなリレーションなの?
で、今はどんなアソシエーションを記述してんの?
もしかしたらDB設計が悪いという可能性もある。
386:nobodyさん
08/03/28 00:51:53
>>385
各フレームワークの評価目的でプロトタイプを作っていますので
特定のテーブルの再設計で問題を解決するアプローチでは応用範囲が非常に限られてしまいます
申し訳ありませんがCakePHP側での解決を求めています
例えばごく単純にモデルが
A→B→C→D
とbelongsToで数珠繋ぎにアソシエーションが設定されている場合
AのリストにB~Dのデータを動的に付加して取得したいとすると
どのような指定をすればよいのでしょうか
SQLならJOINをただ書き連ねていけばいいのですが
387:nobodyさん
08/03/28 01:28:45
>>386
CakePHPさわってどれくらい?
あまりにも初心者的な質問やめてくれる
388:nobodyさん
08/03/28 01:30:56
スレ分けて欲しいな。CakePHP初心者スレ作ってよ
389:nobodyさん
08/03/28 01:42:40
>>386
初心者が他人の力借りて簡単にCakePHP評価しようなんて
CakePHPなめすぎだろ?
自分で死ぬ思いでググれボケ
390:nobodyさん
08/03/28 02:37:39
>>386
できそうにない。
URLリンク(trac.cakephp.org)
上で同じようなこと言ってたけど対応なしにcloseされた模様。
URLリンク(trac.cakephp.org)
上も同様のことを言ってる。3週間ほど前。
>>377 >>383 >>387 >>388 >>389
俺もこれの具体的な解決方法を知りたいです。どうか教えてください。
391:nobodyさん
08/03/28 02:57:36
>>390
CakePHPの知識全くないくせに英語力を自慢がしたいの?
392:nobodyさん
08/03/28 03:06:49
>>390
>>371
ここにいる馬鹿どもが、みんな英語わかると思ってんのか?w
さりげなくバカにしてるだろ
393:nobodyさん
08/03/28 03:20:48
>>390
今調べて出来そうにないって。こういうケースはじめてなの?
経験浅すぎじゃね。1つのサイトをCakePHPで完成させたことないやろ
394:nobodyさん
08/03/28 03:22:38
>>391
いや、これに関しての日本語の情報がなかなか見つからなかったから英語の記事を探さざるを得なかっただけ。
で、CakePHPの知識がある人はこれをどうやって解決してるんでしょうか?
395:nobodyさん
08/03/28 03:31:35
>>390
どうして、できそうにないか具体的に日本語で説明しろ。わかったな命令だ
396:nobodyさん
08/03/28 03:56:27
このスレ、なんか冗談だと思えるくらい殺伐としてんな w
397:nobodyさん
08/03/28 06:59:33
>>396
何でだかアンチが混じっている。
で、cakePHPは重いとか、質問者を叩いたり。
無視推奨。
つか、アンチしてる人、cakePHPを無視すればいいのにね。
398:nobodyさん
08/03/28 08:46:16
英語のサイト貼りつけて叩かれるのは初めて見たw
日本のサイトで分からなければ、海外サイトくらい見るだろ。
分からなければWeb翻訳すればいいんだしな
399:nobodyさん
08/03/28 09:18:10
粘着気質で知性もないとか救いようがないな。
トリップの付け方も知らないらしいし、ほんと終わってんな。w
400:nobodyさん
08/03/28 09:20:55
なんだこの流れ
とてつもないバカが何人かいるな
401:nobodyさん
08/03/28 09:29:46
>>390
まさしくそのtickets通りです
CakePHPは隣り合ったアソシエーション間ではJOINを繋いでSQLワンコールに最適化してくれますが
それ以上のテーブルをまたいだ関係を持とうとすると途端にクエリ量が増えてしまいます
個人的にrecursiveでアソシエーションの深度を指定する考え方は
好感が持てるのですが、負荷の高さを考えると使用をためらわざるを得ません
サブクエリをインテリジェントに挿入しろとは言いませんが
今回の様な使用頻度の高いと思われる(かつ、割と実装の想像しやすい)処理ならば
既に解決された方がいらっしゃるのかと質問に至りました
--
先ほどContainableBehaviorを試してみましたがクエリ量は変わりませんでした
やはりコアに直接手を加えないといけないようですね(´・ω・`)
402:nobodyさん
08/03/28 10:01:46
A→Bのクエリ発行したときに
モデルにB→Aのアソシエーションも記述してあると
B→Aのクエリも発行される
だから
A→B→C→D のようなのをそのままやっちゃうと
えらいことになる
だから、いらいないアソシエーションはunbindModelでぶった切る
あと、1.2だと発行クエリが1.1より最適化されている
(つまり、少なくなってるってこと)
403:nobodyさん
08/03/28 10:11:39
>>397
明らかにアンチじゃない奴のほうがたち悪いぞ。質問者叩いてるのもそう。
>>402
>>401の問題解決にはならないんじゃない。B->Aのアソシエーションがなくても起こるから。
>>401
DBにview作れば早いと思うよ。
404:nobodyさん
08/03/28 10:15:32
質問があまりにもバカすぎて・・・
レベル低いよな。
ここでアフォみたいな質問してるやつは
CakePHPでサイト構築したことあるのかと聞きたいよ
405:nobodyさん
08/03/28 10:19:27
あまりにもバカみたいな質問にバカみたいな回答が多すぎ
もっと常識レベルでの会話して欲しいな
駄文ばっかで何の役にも立たないよ
406:nobodyさん
08/03/28 10:27:40
>>405
それそのまま>>405に当てはまるのわかる?
407:nobodyさん
08/03/28 10:30:15
もっと常識的な質問たのむ
408:nobodyさん
08/03/28 10:36:03
かわいそうに
409:nobodyさん
08/03/28 10:57:56
バッチ処理で長くかかる処理をやるのなら話は別だけど
ウェブアプリなんて画面に表示する少ないデータを
表示するだけなんだからJOINしなくてもいいと思うんだけどね。
どうせ複雑なJOINならJOINするのにも負荷かかるわけだし。
ま、パフォーマンスと開発効率のトレードオフ。
どうしても必要なら、モデルに専用の検索メソッドでも作って
自分でクエリー書けばいいんじゃない?
410:nobodyさん
08/03/28 11:00:25
もっと常識的な質問たのむ
411:nobodyさん
08/03/28 11:03:37 q/btZ3WH
アンチがしつこくネガティブキャンペーンするのも
CakePHPが人気になって普及してきた証拠かなぁw
アンチじゃない人はIDだすようにするか?
そうすればID出していない人はアンチってわかるし。
出したら出したで削除できるしw
412:nobodyさん
08/03/28 11:10:07
アンチを勘違いしてると思うが
いい質問には、マナーをもって接するが
ろくでもないレスばっかりだからな
413:nobodyさん
08/03/28 11:13:12
>>411
自治厨乙。
だいたいにして、IDなんていつでも変えれるんだから意味ないじゃん。
414:nobodyさん
08/03/28 11:14:01
ろくでもないレスは無視するかマナーをもって
訂正を促すのが良い返答の仕方だよ。
415:nobodyさん
08/03/28 11:14:44 q/btZ3WH
>>413
やってみなきゃわからないじゃんw
416:nobodyさん
08/03/28 11:17:51
>>415
どんだけ必死なんだよw
417:nobodyさん
08/03/28 11:57:59 anJTbKap
>>409
もちろん速度を重視しなくてはならない場面ならば専用メソッド内でSQLを書きます
しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
フレームワーク自体に手を出して最適化させた方がコスト的にベターかなと思います
>>403
複雑なアソシエーションのパターンが出来上がってる時はView使った方がいいですね
今ふと考え付いたのですが、結合済みの仮想テーブルを作って、それを元に
CakePHP側のモデルを構築するアプローチは面白いかもしれません
#仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
418:nobodyさん
08/03/28 12:20:53
>>417
負荷を考えるならフレームワークやめろ
CakePHPなんてのは、どうでもいいクライアントに高速納品するための道具てことに気づけよバカ
419:nobodyさん
08/03/28 12:26:48
>>417
今頃フレームワークの評価とか手を出すとか、どんだけ遅れてんだよ
この業界は進歩が早いの知ってる?
420:nobodyさん
08/03/28 12:43:39
>>417
> 結合済みの仮想テーブルを作って、それを元にCakePHP側のモデルを構築する
view作ればって言ったのはそういうこと。
面白いかどうかはおいといて、現状の打開策としてはアリかなと思うわけです。
> 仮想テーブルへの更新作業はDB依存のため怪しい臭いはしますが
このDB依存は仕方ないと割り切ればいいんじゃないかな。割り切れるところだと思うし。
421:nobodyさん
08/03/28 12:49:51
>>417
やる前にあれこれ聞かずにやってみろよ
こんなとこで解決できれば苦労しねーよクソが
422:nobodyさん
08/03/28 12:53:20
評価なんてソース解析して自分で実際にサイト構築しないとわからねーよ
やってくうちに想像しない難点が沢山でてくるよ
423:nobodyさん
08/03/28 13:01:42
>>417
速度重視とか柔軟性考えるならCIにしろや
424:nobodyさん
08/03/28 13:04:47
CakePHPを最適化させにくいフレームワーク
最適化したいならCIスレにいって、このスレからでていけや
425:nobodyさん
08/03/28 13:28:19
>>420
426:nobodyさん
08/03/28 13:34:05
っていうかJOINにならないというのは
どのフレームワークでも同じこと。
CIでもSymfonyでもRubyOnRailsでも同じだよ。
特にCIは最悪だね。いろんな意味で。
ここではすれ違いだから言わないけど。
427:nobodyさん
08/03/28 13:40:13
>>426
どのフレームワークも同じなら軽量でサクサク動作するCIの方がマシ
428:nobodyさん
08/03/28 13:44:02
>>417
> しかし、上記の様にシンプルなアソシエーションすら動作が怪しいとなると
シンプルではないよ。
CakePHPでもその他でもそうだけどO/Rマッピングというのは
従来の表形式の使いづらいリレーショナルデータベースを
高レベルに扱いやすく使えるようにするもの。
リレーショナルデータベースを基本に設計されたものではなく
より理想的なオブジェクト指向風なデータ構造をもとに設計されたもの。
だからいろんな取り出し方ができる出来る柔軟性がある。
たとえば、behaviorでデータ挿入・取り出し時に色んな処理をかませられる。
そういう柔軟性を持たせながらシンプルなSQLに置き換えるのは容易ではない。
不可能な場合すらある。
なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること。一日働いて3万円人件費をかけるのなら、
その3万円でスペックをあげたほうが総合的に考えてメリットが
高いという時代だから、今は。
429:nobodyさん
08/03/28 13:50:03
CIはデータベースを使わない。使う頻度が少ない場合にはいいけど、
データベースを使う場合、貧弱だよな。
あれならSQL直書きした方がいいってほどメソッドがアホらしいしw
なによりビヘイビアが無いのが一番痛い。
430:nobodyさん
08/03/28 13:50:47
>>428
なんでもかんでもパフォーマンスを気にして無駄なものを作るのは
初心者のやること
サイトリニューアルなど
既存ユーザーが多数いる自社製品ならパフォーマンスを意識する
431:nobodyさん
08/03/28 13:52:21
> 既存ユーザーが多数いる自社製品ならパフォーマンスを意識する
マシンスペックを上げろ
432:nobodyさん
08/03/28 13:54:32
>>429
複雑なアソシエーションはSQL直書きになるんならCIが理にかなってる
433:nobodyさん
08/03/28 13:55:17
複雑なものじゃなくてシンプルにしようと考えような。
434:nobodyさん
08/03/28 13:55:42
>>426
symfony(というかpropel)はJOINになる
435:nobodyさん
08/03/28 13:56:08
>>431
ユーザーが増えるたびに、どんだけマシンが必要になるんだよ
436:nobodyさん
08/03/28 13:56:12
JOIN使わないで一回一回よんでも
パフォーマンスはたいして変わんないんだけどなw
437:nobodyさん
08/03/28 13:57:04
>>435
ユーザーが増えると重くなるのはどれでも一緒ですが?
働いていない人は、人件費というコストを計算に入れないからなぁw
まあ、がんばれやw
438:nobodyさん
08/03/28 13:57:54
>>436
変わるよ あほか
439:nobodyさん
08/03/28 13:57:57
SQL直書きになる機会が多いならCIがいい
440:nobodyさん
08/03/28 13:58:21
O/Rというのはリレーショナルデータベースからの
脱却に意味があるというのに、今時SQLなんて低レベルなことやるかよw
441:nobodyさん
08/03/28 13:58:54
>>437
ずっと開発してるわけじゃねーからw
人件費とか1回ぽっきりやん
442:nobodyさん
08/03/28 14:00:15
複雑なSQLならO/Rマッピング使えないじゃん
今のCakePHPなら
だったらCIでSQL直書きが最高よ
443:nobodyさん
08/03/28 14:03:25
>>437
重くなりかたが異なってくるんですが?
1回で済む処理を2回のクエリで行ってるとアクセス数が増えたときにクエリ発行数が大きく変わることがわかんない?
ほんとにプログラマなのか?まぁ、がんばれや
444:nobodyさん
08/03/28 14:05:37
ぷw 頭固いな。mixiの話とかしらんのかいな
mixiでは”高負荷に耐えるためにJOINを使っていない”んだよ。
URLリンク(www.google.co.jp)
445:nobodyさん
08/03/28 14:07:29
>>442
使えていますが? JOINが使われないってだけでしょうが。
パフォーマンスに問題が無い場所で、
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHPと、
SQLを書くのと同等の手間をかけなければならないCIでは
どちらが優れているかは言うまでも無く、CakePHPですね。
446:nobodyさん
08/03/28 14:08:18
>>441
マシンスペックを上げるのも一回ぽっきりですが?
447:nobodyさん
08/03/28 14:09:13
ビヘイビアがない時点でCIは糞w
448:nobodyさん
08/03/28 14:11:24
>>445
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP
group byとかどうやんの?
449:nobodyさん
08/03/28 14:12:45
>>445
複雑なSQLを、SQLを書かずに作れる(買いても作れる)CakePHP
この発言無理がありすぎやろw
450:nobodyさん
08/03/28 14:13:42
>>444
あのさ、読解力なさすぎ。
「高負荷に耐えるためにJOINを使っていない」とは書いてない。
451:nobodyさん
08/03/28 14:14:14
結局アンチはいつものCI厨だったなw
452:nobodyさん
08/03/28 14:15:24
>>450
ではJOINを使わない理由になんて書いていますか?言ってみてください。
453:nobodyさん
08/03/28 14:17:30
>>452
スケールするためにデータベースを分割し、JOINが使用できなくなったから。
454:nobodyさん
08/03/28 14:20:13
スケールとはパフォーマンスをあげるということです。
455:nobodyさん
08/03/28 14:21:44
うん。だから?
456:nobodyさん
08/03/28 14:22:38
>>455
おまえの負けてことだよ
457:nobodyさん
08/03/28 14:24:15
>>456
あからさまにバカだな。論理的に考えられないんだな。
458:nobodyさん
08/03/28 14:24:38
>>447
1.1使ってる人は真性なる糞ですね
459:nobodyさん
08/03/28 14:25:14
高負荷に耐えられるパフォーマンスを作り出す為に、
データベースを分割してJOINが使用できなくなった。
負荷を考えるのなら、JOINなんかするより、
マシンに投資してデータベースを分割(当然マシンも増えているはず)して
アプリケーションで行ったほうがいいということです。
460:nobodyさん
08/03/28 14:28:55
>>457
さっきまでパフォーマンスの話してたやろうが
論理的な会話してないのお前だろw
461:nobodyさん
08/03/28 14:31:33
結局CIが最強てことじゃんか
462:nobodyさん
08/03/28 14:37:17
CIはフレームワークを使っているとは思えないほど開発工数がかかる。
データベース部分は、SQLの単語(selectやfromやwhere)を
それぞれメソッドに置き換えて実行しないといけない。
なんとビックリw
だから糞。
463:nobodyさん
08/03/28 14:38:23
わろたw
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
464:nobodyさん
08/03/28 14:38:41
>>459
ただ、「マシンに投資してデータベースを分割(当然マシンも増えているはず)して」が始めからできるわけじゃないんだよね。
だからSQL発行数も含め、パフォーマンスには常に気を遣うわけで。
mixiが今はソフトウェア側でパフォーマンスを気にしてないかっていったらそんなことはないし。
>>460
パフォーマンスの話してるよ。何言ってんの?
もう面倒だからお前いいよ。
465:nobodyさん
08/03/28 14:40:13
だからパフォーマンスを重視するところだけ
最適化して、あとは楽で速いコーディングをすればいいじゃんか。
パフォーマンスの基礎だよ?
466:nobodyさん
08/03/28 14:41:27
>>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,)
これに比べれば天と地に差
467:nobodyさん
08/03/28 14:42:45
>>466
引数の数を勝手に増やすなw
最後の引数の意味言ってみろよ。
いえなければ赤っ恥だなw
468:nobodyさん
08/03/28 14:42:48
>>464
おまえ誰だよ?トリップでも番号でもいいから付けろよw
469:nobodyさん
08/03/28 14:44:26
>>463はPHP4だと
$this->db->select('title');
$this->db->from('mytable');
$this->db->where('id', $id)
$this->db->limit(10, 20);
こうなります。
470:nobodyさん
08/03/28 14:45:17
>>464
名無しで必死にレスしてるようだが
名前に番号でもつけてくれないと
今までどんな発言してんかわかんないんだがw
471:nobodyさん
08/03/28 14:46:08
>>468
どうせトリップつけさせて削除しようって魂胆だろ。
そんな手に引っかかるか。ばーかw
472:nobodyさん
08/03/28 14:46:42
>>469
わかりやすくていいね、さすがCI
ヌルヌルフレームワークとは大違い
473:sage
08/03/28 14:50:37 JUQ1v1x2
$this->flash で出てくるはずのページがIE6だと表示されん。ソースは吐かれてる。
ってことはUTF関係か。
474:nobodyさん
08/03/28 14:50:44
アンチレス繰り返してたら、えらい盛り上がってきた
475:425
08/03/28 14:54:55
すみません、途中投稿しました
>>420
その通りですね。同一アプリケーション内でDBをスイッチする事はありえないので
リスクとしては小さいため十分検討できます(一応、PostgreSQL使ってる方は注意です)
>>424
CodeIgniterもとてもいいフレームワークだと思います
ぜひその情熱で当該スレッドを活性化させて盛り上げて欲しいですね
>>428
確かにアソシエーションの自動判別が面倒(無理)という事情は分かります
面倒なSQLを叩かずオブジェクティブにデータセットを取得できる機能が
すでに実装されていているのですからそれを使うに越した事はありません
この辺りの実装はアプリケーション全体のパフォーマンスに影響するため
サーバ増設前の改良を十分に検討できる部分だと思います
476:nobodyさん
08/03/28 14:54:59
実はアンチを煽って盛り上げさせているというのはナイショだw
見ろ他フレームワーク(特にCI)の静けさを!
477:nobodyさん
08/03/28 14:56:44
>>469みたいなコードを書くぐらいなら
SQLをそのまま書いたほうがいいな。
478:nobodyさん
08/03/28 15:06:18
>>428
すみません
>>475の説明はちょっと意味不明ですね、スルー推奨です
479:nobodyさん
08/03/28 15:45:01
Cakeは糞
480:nobodyさん
08/03/28 15:54:32
aki(ryが本出してるから糞
481:nobodyさん
08/03/29 07:40:57
あの本は確かに糞だったな
482:nobodyさん
08/03/29 09:07:16
あれは本当に酷かった
483:nobodyさん
08/03/29 15:28:58
文句だけは達者だな
484:nobodyさん
08/03/29 15:56:30
達者?
485:nobodyさん
08/03/29 16:10:19
このスレはいつも無駄に盛り上がるよな
486:nobodyさん
08/03/29 16:54:04
>>484
ゆとり乙
487:nobodyさん
08/03/29 17:43:56
>>486
ゆとり乙
488:nobodyさん
08/03/29 20:03:50
>>486
ゆとり乙
489:nobodyさん
08/03/29 22:04:16 t2qvxoud
CakePHPっていいフレームワークだよな
490:nobodyさん
08/03/29 22:08:25
ソース汚いけどな
491:nobodyさん
08/03/29 22:15:25
最高のフレームワークだね
完璧すぎる
492:nobodyさん
08/03/29 22:29:55
おまいらマインドマップ使ってる?
493:nobodyさん
08/03/29 22:57:31
30才過ぎるとマインドマップ使わないと
トイレ行った後とか今まで何考えてたかさえ忘れる
494:nobodyさん
08/03/29 23:43:43 VJRoSuRr
なんでマインドマップの話になったか分からないけど、自宅と会社のPCに
FreeMindインストール済み。
自宅ではCakePHPのシステム設計に使ってる。
ひとつずつやる事片付けて、終わったブランチに「レ」のアイコン付けるのが
楽しい。
495:nobodyさん
08/03/30 02:14:14
UMLはルール化した図解表現
マインドマップは自由な図解表現
496:nobodyさん
08/03/30 02:16:24
マインドマップで設計し形になったものをUML化する
497:nobodyさん
08/03/30 02:17:48 xhO/sY7i
んで、UMLで書いた仕様書を投げ捨ててウンコする
498:nobodyさん
08/03/30 02:19:35
CakePHP使ってればUMLもマインドマップも必要ない
499:nobodyさん
08/03/30 02:26:47
作業途中に仕様的にやばい匂いがしたらマインドマップ使ってる
500:nobodyさん
08/03/30 02:31:49
問題を解決しやすい方法として
思ったことを、どんどん言葉として書き出す
わかってるからと頭の中でしまいこむと、全体的な解決図を結び付きにくくする
501:nobodyさん
08/03/30 02:45:33
難しい状況を言語化する能力がコミュニケーション能力での重要ポイントだと思う。
もっと言語化するクセつければ、コミュニケーション能力向上になるんじゃないかな
502:nobodyさん
08/03/30 17:27:12
render呼んだ後
すぐexit();
してる?
503:nobodyさん
08/03/30 20:27:27 3z+xm+ln
>>473
遅レスだが、ソースの頭にBOMを付けたら表示されるようになた。
が、viewのファイルは8Nで保存しておかないと、たまに悪さをするようだ。
504:nobodyさん
08/03/30 22:06:44
>>502
もっと常識的な質問たのむ
505:nobodyさん
08/03/31 10:30:36
>>502
してないよ
506:nobodyさん
08/03/31 10:59:21
>>505
コンポーネントでrenderを呼んだときは
exitしないとデフォルトのrenderが最後に読み込まれるよ
507:nobodyさん
08/03/31 11:00:31
cakePHPのテスト環境だけど
SeleniumとSimpleTestの組み合わせが最強?
508:nobodyさん
08/04/01 01:26:52 j0Vrw1hD
>>507
そっちのテストなら、セレニウムだろうと手作業だろうとなんだって良くね?
ユニットテストをするのなら1.2から正式対応したSimpleTestって言うだろうけど。
ていうか、テスト駆動開発って面倒ですよね、時間がかかるけど出来上がり安定するのは確かだけど。
509:nobodyさん
08/04/01 01:34:29
正確にはテスト駆動じゃないけど、
ある程度の規模になったら、ユニットテストをやらないなんて
考えられないよ。
修正があるたびに同じテストなんてやってられない。
それこそ時間がかかる。
510:nobodyさん
08/04/01 02:09:46
Selenium IDE これいいね。これだけでも同じテストする必要がないし
なんといってもテストが楽
511:nobodyさん
08/04/01 12:33:08
Yahooが占いコンテンツ制作にCakePHPを採用
512:nobodyさん
08/04/01 20:20:10
なにこの寂びれぶり
513:nobodyさん
08/04/02 00:32:30 Ldo05SB7
んじゃ、おれがこのスレを潤わせてやるぜ
ビヘイビアって使ってる?
514:nobodyさん
08/04/02 00:38:10
>>512
荒らしが去ったので落ち着いただけ。
CakePHPを使って、ようやくサイトを公開できた。
思ったより使いやすいね、CakePHP。
515:nobodyさん
08/04/02 03:09:53
コンポーネント、ビヘイビア、ヘルパーの中では
ビヘイビアを一番使うな。
よくよく考えると、ソフトウェアの中心はモデル。
その中心の共通処理なんだからよく使うのは当たり前か。
516:nobodyさん
08/04/02 11:07:25
>>515
ソフトウェアの中心はコントローラー
なぜならコントローラーはモデルとビューにも指令を出すが
モデルは、たいていコントローラを介してのやりとりになるから
そういう考えで行けば、よく使うのはコンポーネントじゃないとおかしい
517:nobodyさん
08/04/02 11:18:11 Ldo05SB7
>>516
アフォがあらわれた
518:nobodyさん
08/04/02 11:57:50 KzinrGTW
findCount()で count(distinct hoge) を指定したいのですが
それは、findAll() でやるべきなのでしょうか?
519:nobodyさん
08/04/02 12:05:53
うん。アフォだ。ワロタw
コントローラなんて所詮インターフェースに過ぎんよ。
実際の処理じゃなくて、ブラウザから引数を受け取って
それを少々加工してモデルに渡す。
またモデルから受け取ったデータを少々加工してビューに渡す。
流れとしてはこんな感じだね。
「ブラウザ」→「コントローラ(加工)」→「モデル(実際の処理)」→「コントローラ(加工)」→「ビュー(HTML出力)」
っていうか、このように作らないとテストがしづらいったらありゃしない。
SeleniumやCakeWebTestCaseがあるとはいえ、
コントローラを操作してのテストでは範囲が大きすぎる。
もっと小さな範囲でテストできるようにしないといけない。
一番重要な処理を最小限の大きさ(なるべく他に依存しない)で
テストすること考えれば、自然とこうなるはず。
520:nobodyさん
08/04/02 15:46:57
ガソリン安いな~
これほど自民党の一党独裁の問題点が分かりやすい現象は無いなw
521:nobodyさん
08/04/02 16:07:32
>>519
そうなんだ。だから本にもモデルのテストの方法しか書いてなかったんだ。
モデルよりコントローラーをテストしたいんだけど・・・ってずっと思ってた。
ということは、僕のプログラムの組み方がよくないんでしょうか。
522:516
08/04/02 16:33:04 Ldo05SB7
>>515,>>121
さきほどはアフォと一言で片付けてしまって申し訳ない、2ch流の愛情表現だと思ってくれ
で、>>519のいうとおりアプリケーションの中心となるビジネスロジックについてはコントローラなどでは
なくモデル内で実装するべき。一番大切なテストはビジネスロジックであるわけだし、モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装することでコアロジックを別システムに
再利用しやすくなるというメリットも受けられる。
なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべきだし、コントローラ
内で繰り返しよく使う処理についてはコンポーネント化してあげたほうが、ユニットテストで品質を保証できるので
良いかと。
こんな感じで考えていますが、どうでしょう?
523:nobodyさん
08/04/02 16:44:10
>>519
Seleniumこれだけあれば、全く十分なんだが
これ以外でテストしようとすればコストかかるだけやろ
どんくさい作業してんな、赤字やろ?
524:nobodyさん
08/04/02 16:50:49
>>522
だから何ってかんじだが、それがどうしたんだよ
リファレンスに書いてあるようなこと、なんで必死に訴えてるのwww
525:nobodyさん
08/04/02 16:52:59
自演厨きたー。うぜえええ
526:nobodyさん
08/04/02 16:56:38
Seleniumなんかでテストしたら時間(=コスト)がかかるよ。
ブラウザを起動する為、そもそも動作が遅いってのもあるが、
Seleniumだといくつものモジュールが組み合わさった状態で
テストするしかないから、どこのバグがあるのか見つけにくい。
またデータの初期化などが出来ない。
途中で内部のデータを調べることも出来ない。
CakePHPにはSimpleTestでブラウザをエミュレートした状態の
テストもできるので基本はそれを使ったほうが良い。
Seleniumを使うとしたら、SimpleTestではできない
JavaScriptが絡んだ処理のテストぐらいだな。
527:nobodyさん
08/04/02 16:58:43
リファレンスに書いてあるようなことなのだから、
間違いではないということだなw
528:nobodyさん
08/04/02 17:01:36
>>522
アプリケーションの中心となるビジネスロジックて何?
どんなロジック?
一番大切なテストてどんなテスト?
>>モデルに集約して
(かつコントローラとのインタフェースも疎結合にして)コアロジックを実装
プラグインと違うの?
>>なので、コントローラはある意味、テストをしなくても問題ないくらい「薄い」実装にするべき
モデルとビューに命令出すのに薄い実装なんて物理的に無理
モデルはカラッポでOK
529:nobodyさん
08/04/02 17:04:44
>>526
ブラウザ上でテストするだけなのにモジュールとか関係ないしwww
JavaScriptテストやるなら加工しないと出来ないだろwww
530:nobodyさん
08/04/02 17:05:56
>>526
Selenium使ったことないやろ?正直にいえ
531:nobodyさん
08/04/02 17:08:00
SimpleTestの方が時間かかるよ
532:nobodyさん
08/04/02 17:08:48
内部のデータを調べるようなテスト時間かかるに決まってるやろ
533:nobodyさん
08/04/02 17:09:00
また、例の嵐だな。
534:nobodyさん
08/04/02 17:09:39
とりあえず言っておくけど、CIは糞だから、
糞スレでやってねw
535:nobodyさん
08/04/02 17:13:49
>>532
たしかに!
536:nobodyさん
08/04/02 17:16:18
>>522
日本語でおk
537:nobodyさん
08/04/02 17:18:56
なんか、CI普及の為(?)にわざとアフォなことを言っている気がする。
いや、まて、わざと悪い例を出しているのか?
まあ、訂正している俺は考えをまとめられていいけどな。
(そして訂正している文を見て学習する人もいるだろう)
> モデルとビューに命令出すのに薄い実装なんて物理的に無理
> モデルはカラッポでOK
コントローラが出す命令はすごく小さなものだよ。
モデルに対して、「データ取って来い!」「書き込め!」「削除しろ!」
そして、「複雑な一連の処理をしろ!」
前三つは、CakePHPの自動生成コードでも書いてあるから
簡単にわかると思うけど最後の「複雑な一連の処理をしろ!」を
モデルに書くべきってことをわかってない人が多いんだよね。
複雑な一連の処理をコントローラに書いてしまう。悪い例だ。
538:nobodyさん
08/04/02 17:27:44
>>537
テストのことを考えていってんの?俺はテストはブラウザでしかしないからw
539:nobodyさん
08/04/02 17:29:17
テスト中心に設計するならモデルに詰め込めるだけ詰め込めばいいんじゃね
540:nobodyさん
08/04/02 17:30:57
>>537
複雑な一連の処理を具体的に述べよ
はなしはそれからだ
541:nobodyさん
08/04/02 17:32:26
where が入るような条件文はモデルに書けばいいの?
542:nobodyさん
08/04/02 17:33:42
>>537
モデルにもっていっていいのは
どこからどこまで?
543:nobodyさん
08/04/02 17:45:27
>>537
いくら給料もらってんだよ
俺はPHPプログラマで36万円
544:nobodyさん
08/04/02 17:53:38
モデル上で別のモデルのデータ取得できなくね?
545:nobodyさん
08/04/02 17:55:24
>>542
どこまでをモデルでやるかは結局設計しだいだけど、
>>541
ユーザーがフォームからの条件入力。URL形式での条件入力
、つまりコントローラのアクション関数の引数に入る場合。
その引数をもとにモデルを呼び出すわけだけど、
このときのモデルの関数は汎用的なfind関数でもいいし、
もっと簡単に扱いたければ、モデルに専用の関数を作って呼び出す。
汎用的なfind関数を使う場合には、array('key' => '= ' . $value)なんて
条件データに加工しないといけないよね? これがコントローラの処理。
モデルに専用の関数を作る場合、もっと簡単に使える関数にするね。
もちろんその場合、モデル内部でfind関数を使うことになるだろうし、
そのための条件の加工もモデルに書く。
ユーザーの入力した条件が、POSTでくる場合は、
$this->dataから条件を作り出す所までもうちょっと
コントローラでやる仕事が増えるだろう。
それでもコントローラの処理(モデルを呼び出すところまで)はこれだけ。
俺ならこのように作るよ。
あとモデルから戻ってきたデータを、ビューで使いやすいように
単純化するのもコントローラの仕事だね。
546:nobodyさん
08/04/02 17:59:00
>>544
> モデル上で別のモデルのデータ取得できなくね?
モデル上で別のモデルのデータを使用したいと思ったとき、
その二つのモデル間には関連性がある。
つまりアソシエーションを定義している。
アソシエーションを定義しているのなら、
モデル内で、別のモデルを呼び出すことが出来る。
Model1の中から、$this->Model2->findAll(); 感じで呼び出せる。
547:nobodyさん
08/04/02 18:01:31
>>545
モデルから戻ってきたデータを、ビューで使いやすいように単純化
数字にコンマ付けたりとか?
548:nobodyさん
08/04/02 18:02:43
>>546
そのやり方はCakePHPで推奨されてる方法なの?
549:nobodyさん
08/04/02 18:05:48
>>546
わざわざアソシエーションするの?
いつも結合されて重くなるじゃん
550:nobodyさん
08/04/02 18:06:46
>>547
それは見た目を変えるだけだからビューの仕事だろうね。
モデルから戻ってきたデータとは、汎用的なfind関数の場合、
$data => array(
モデル名 => array(
フィールド名1 => 値1,
フィールド名2 => 値2,
フィールド名3 => 値3,
)
)
こんな値が返ってくる。もちろん、これをそのまま
ビューに渡してもいいんだけど、これじゃあビューで使いにくい!
って言う場合加工する。
そんな場合あるのかって? 余り無いだろう。
そう、だからコントローラの仕事は少ない。
モデルから取得した値をビューに渡す$this->set(・・・) は
コントローラの仕事ね。
551:nobodyさん
08/04/02 18:07:42
>>549
必要なときにつけたりはずしたりする方法は、何度も既出
552:nobodyさん
08/04/02 18:11:37
>>548
だめなのか?
553:nobodyさん
08/04/02 18:12:12
>>546
なんでモデルでやるの?そのメリットは?
554:nobodyさん
08/04/02 18:21:49
>>553
もちろん、直接関係が無いモデルは別々に
アクセスするよ。
モデルというか処理の内容から考えて
一つであるべきと思う場合は一つのモデルでやる。
あと、トランザクションの為のメソッドが
モデルにあることも興味深いよね。
一連関係ある処理は一つのモデル内で完結させるものと
考えると、なるほどと思わない?
555:nobodyさん
08/04/02 18:23:17
>>546
モデルは複雑にすべきじゃないよ。な中規模設計したとき
アソシエーションで必ず問題起きそう
556:nobodyさん
08/04/02 18:27:56
>>555
その意見はわからないでもないが、
普通にRDBMSを正規化したとき
そういう関連(リレーション)は出来るもんなんだが・・・
RDMSを正規化すると複雑になってしまう。それがいやだから
それを解決する為に、O/Rがあるんだと思うぞ!
557:nobodyさん
08/04/02 18:28:26
×RDBMSを正規化したとき
○RDBMSでテーブルを正規化したとき
558:nobodyさん
08/04/02 18:32:44
>>546
ページ数が増えたとき、コントローラを増やすことができるけど
コントローラが増えた分モデルを増やすこと出来ないよ。
ひとつのモデルに書くコードが恐ろしく増えるね
559:nobodyさん
08/04/02 18:34:17
また例の馬鹿か?
560:nobodyさん
08/04/02 18:35:56
> コントローラが増えた分モデルを増やすこと出来ないよ。
言っている意味が、よくわからないんだが・・・
例えコントローラが無くてもモデルは作れるし、
一つのコントローラで複数モデルを扱うことも出来るんだが?
561:nobodyさん
08/04/02 18:43:36
全てはコントローラに処理を詰め込み過ぎたscaffoldが悪い。
あれがアフォに勘違いを植え込む。
562:nobodyさん
08/04/02 18:49:12
うーん、自動生成のコードとしては、これしかやりようがない所もあるのだろうけど、
コントローラに処理を詰め込みすぎというか、モデルに処理が何も無いのが
いけないんじゃないかな?
あれじゃ、単にテーブルに直接アクセスするネイティブな関数の
代わりのクラスにしか見えない。
一番、プログラマがいろいろ書くべきなのはモデルなのに。
逆に言えば、いろいろ書かないといけないものだからこそ
自動生成ではモデルに何もないんだろうね。
でもサンプル程度はほしいかも。
563:nobodyさん
08/04/02 18:53:30 KzinrGTW
debugを1以上にするとHTMLの一番最後に
<!-- 0.0012s -->
みたいに、生成時間?のコメントがつくんですけど
これを付けないようにするにはどうすれば良いんでしょうか?
debugは1にしておきたいです。
564:563
08/04/02 18:58:51
あ、webroot/index.php にありました。
565:nobodyさん
08/04/02 19:00:37
cakephpで作られたオープンソースみても
モデルで書かれてる処理はバリデータ関係の関数しかないんだけど
URLリンク(code.google.com)
566:nobodyさん
08/04/02 19:00:38
>>564
Do not changeって書いてあるけどねw
567:516,522
08/04/02 19:01:23 Ldo05SB7
ん?なんかいろいろゴチャゴチャしてきたけど、結局俺が主張してたことは正しかったのか・
「複雑な一連の処理」とかビジネスロジックとかって、たとえば俺の場合は
・①日足の株価を取得してRSIを計算する
・②与えられた条件引数に該当する銘柄の証券コード配列を取得(スクリーニング)
・③現在の株価を受け取り、あらかじめ計算しておいた目標価格の条件を満たすか判別
⇒・更に条件を満たしていれば、買い/売り注文をWEBサービスに投げる処理も「証券会社モデル」(仮称)というDBと連携しないモデルを作成して、HTTP(S)で注文するメソッドを書いてる。
・④現在の株価を取得する(楽天証券のRSSをDDE接続経由で呼び出すモジュールを別途使用)
みたいなアプリが持つほとんどの主要処理を言ってて、これらをモデル(またはビヘイビア)に記述するべきと思うのです。
逆に言えばコントローラは、
・④の「現在の株価を取得する」メソッドからの返し値をそのまま③「株価と目標を評価し、注文する」メソッドに引渡し仲介する
・ビューからリクエストがあった①などの計算処理をモデルメソッド①に引き渡す
・スクリーニング対象銘柄の証券コードリストを取得し、そのまま②のスクリーニングメソッドに引き渡す。
くらいのことしかしていない。人間の世界でいうと「仲介人」かと。
568:nobodyさん
08/04/02 19:06:54
>>565
お前の目は節穴か・・・
ってかこのソースあまりいいとは思えないな
569:nobodyさん
08/04/02 19:08:08
OpenFLP
Rails 製のオープンソース版 Fastladder
モデル 382steps
コントローラー 910steps
コントローラーに処理書きまくってるんですが。。。
570:nobodyさん
08/04/02 19:09:00
じゃあ本家railsのソースコードみせてやる
571:nobodyさん
08/04/02 19:11:13
コントローラに処理を詰め込みが正論か非か
オープンソース見れば、すぐわかることだからな
572:nobodyさん
08/04/02 19:15:29
オープンソースといってもその質はピンキリだから
> じゃあ本家railsのソースコードみせてやる
おいっ! railsはフレームワークだ。
もともとビジネスロジックは含まれてない!
573:nobodyさん
08/04/02 19:18:52
>>567
全部コントローラで出来るし
それをCakePHPでやる意味がわからんw
574:516,522
08/04/02 19:46:05 Ldo05SB7
>>573
あー、「全部コントローラで出来るし」って言ってる時点でプロフェッショなるじゃないことが確定www
議論しても理解できないんだろうな、「できる/できない」ということと「(プロとして)やるべき/べからず」
といった本質的な点をwww
コントローラでも全部やろうと思えばできることくらいわかっとるわいwww
575:nobodyさん
08/04/02 19:58:32
>>574
CakePHPでやることじゃないことは確かwww
576:nobodyさん
08/04/02 21:14:45
ビジネスロジックはモデルに集約すべき
議論としては面白い
俺もその辺気になってた
まあ俺はbakeしたコードの拡張から入ったクチだから全部controllerに書いちゃうけどなwww
577:nobodyさん
08/04/02 21:37:43
>>576
俺もコントローラに書いてしまったけど、
作り続けていくうちに、なんか無理が出てくるんだよ。
なんでこんなに作りづらいんだ?って思っていたときに
このスレにあった、ケーキの絵。あれで悟りを開けた気がする。
あぁモデル中心でやればいいんだって。
578:nobodyさん
08/04/02 21:58:22
>>577
その絵ってどれ?
579:nobodyさん
08/04/02 21:58:46
>>562
モデルに書けって言うけど、何を書くの?
関数で書けばいいの?モデル内のメソッドとして?
>>565
の言うとおり、実例も無いし具体的なメリットが分からない。
今のところテストが楽って事はなんとなく分かった。
580:nobodyさん
08/04/02 22:16:06
>>578
これの3ページ目
URLリンク(cakephp.org)
581:nobodyさん
08/04/02 22:19:41
> 関数で書けばいいの?モデル内のメソッドとして?
モデル = ビジネスロジック用のクラス
なんだから、言うまでも無くメソッドだろ
582:nobodyさん
08/04/02 22:22:03
>>580
ありがとう,でもコントローラーよりモデルに重点おけよという一言で済む話かw
583:nobodyさん
08/04/02 22:26:19
>>581
そうすると、どう幸せになれるわけ?
584:nobodyさん
08/04/02 22:27:49
>>583
どう幸せになるかではなく、
どう幸せになりたいか。
貴方はプログラミングする上で、どうなったら幸せだと感じる?
585:nobodyさん
08/04/02 22:57:59
railsはコントローラーに重点を置くようになってるのではなぜ?
586:nobodyさん
08/04/02 23:14:04
>>574
自分の安価間違ってね?516と522で筋が通ってない
587:nobodyさん
08/04/02 23:53:19
>>585
railsでもモデルが一番重要なものですよ。
588:nobodyさん
08/04/03 00:17:09
モデルが一番重要なんてCakePHPだけの話
松本に話したら鼻で笑われたよ
589:nobodyさん
08/04/03 00:38:13
松本といっても鼻の長いゾウをキャラクターにしている会社の松本だけどなw
590:nobodyさん
08/04/03 00:48:42
でもキリンさんも好きなんだろ?
591:nobodyさん
08/04/03 10:10:52 Z1Ohe4yI
ビヘイバ話はおわったのか?
592:nobodyさん
08/04/03 11:26:08
Model は特定の環境に依存しない処理を行う部分である。
593:nobodyさん
08/04/03 12:10:16
たとえばの話なんですが、
1.フォームから画像ファイルをアップロード
2.アップロード結果・画像ファイルの不正検知
3.2が成功時、元画像名をmd5したものをuploadsフォルダに保存
4.3のファイル名をimage_fileカラムに格納
という一連の処理があったばあい、
今現在はコントロールとコンポーネントに書いてますが、
モデルとビヘイビアに書くとしたら、
2->バリデータに記述
3->ビヘイビア
4->モデル
という感じなんでしょうか?
594:nobodyさん
08/04/03 12:26:23
ビヘイビアて1.2からだろ、
最初から無いってことは必要性が薄いてことだよな
595:nobodyさん
08/04/03 12:32:04
ソースが読みやすければコントローラーで全部書いてもいいし
モデルに書いて読みにくくなるなら、書かない方がいい
結局はソースを読みやすくするために分けてるだけの話
596:nobodyさん
08/04/03 12:32:23
画像アップロードできるビヘイビアあるよ。
正確には画像を保存できるビヘイビアだけどね
URLリンク(bakery.cakephp.org)
597:nobodyさん
08/04/03 12:50:28
結局はソースを見やすくする為にある。
一番見やすいソースとは、なるべく何も書かないこと。
画像をアップロードして保存というのは、本質的には
テーブルに画像フィールドを作ってそこに格納することと変わらない。
だからフィールド追加作業以外は、一切処理を変更しないで
作れるというのが一番理想的。
ビヘイビアを使えば、>>596のようにActsAsにわずかなフィールド情報を
設定して終わりだけど、その他の方法でここまでスマートに作れるかな?
598:593
08/04/03 13:32:44
>>596-597
ありがとうございます。
こりゃ1.2にチャレンジしなきゃだな
599:nobodyさん
08/04/03 13:49:15 Z1Ohe4yI
>ビヘイビアて1.2からだろ、
>最初から無いってことは必要性が薄いてことだよな
正確には1.1の頃からビヘイビアのディレクトリは用意されてたんだよな。
おそらく必要性はあったのだけど、1.1.xのステイブル版までに実装できなかっただけなのでは?
600:nobodyさん
08/04/03 14:22:02
railsにはビヘイビア相当になるものが無いんだが、どうして
601:nobodyさん
08/04/03 15:14:18
ビヘイビアてベネズエラにいる俺の愛人と同じ名前だ
602:nobodyさん
08/04/03 15:38:42
>>600
Rubyではmixinという言語機能でビヘイビア相当のことが出来るから。
603:nobodyさん
08/04/03 17:41:48
マニュアル»CakePHPによる開発»Models»Introduction
URLリンク(book.cakephp.org)
> Model behaviors provide a way to mix in functionality
へぇ、behaviorsはmix-in的な機能を提供するものだったんだ。なるほど。
604:nobodyさん
08/04/03 18:10:28
>>603
きちんとした日本語訳サイトあるのに。。。
605:nobodyさん
08/04/03 18:23:11
>>604
どこに?
606:nobodyさん
08/04/04 20:03:22 GG6uDHIa
わっふるわっふる
607:nobodyさん
08/04/05 04:54:50
cakeでのMC棲み分け例としては以下がありますよね。
個人的にはいい感じだと思いましたが、どうでしょう?
CakePHPを使ったMVC設計のベストプラクティス
URLリンク(www.sooey.com)
608:nobodyさん
08/04/05 05:21:49
MVCモデルのMが重要なのはデータ加工の多いWEBだけのはなしであって
MVCモデル全般的な考えではない
609:nobodyさん
08/04/05 05:24:58
データをあまり使う必要のないWINアプリを
MVCモデルでわけた場合はCが中心となる
610:nobodyさん
08/04/05 09:45:41
Web用のフレームワークのスレで何言ってんだこいつw
611:nobodyさん
08/04/05 15:00:48
MVCのVが重点となるソフトをあげてみよ
612:nobodyさん
08/04/05 15:07:51
rails発のMVCモデルはMがDBと密接な関係であるが
最強のモデルとは思っていない。
最適なモデル構造というには、まだまだ完成度が低いとrails作者は言っている
613:nobodyさん
08/04/05 15:49:00
>>607
面白いけど
これ通りに書いたら一覧性下がりそうだな
大規模なら修正には強くなりそうだね
まずは体に叩き込んでみるのがいいのか
614:nobodyさん
08/04/05 20:57:16
>>611
> MVCのVが重点となるソフトをあげてみよ
静的なウェブページ
615:nobodyさん
08/04/07 17:32:08
ゆくゆくはcake使いたいけどあと8時間くらいしか時間ないし
今は勉強してる暇も無いからとりあえず平で書く
ってときに、最低限これだけ守ってコード書いとけば
あとでcakephpを使いたくなってもまあなんとかなるよ という
ポイントを教えて
616:nobodyさん
08/04/07 17:50:23
Cake同様のライブラリが揃ってるってなら、そんな事も可能だと思うが・・。
無理じゃね
617:nobodyさん
08/04/07 18:06:48
データベースの主キーはIDだけにしておく
618:nobodyさん
08/04/07 18:28:13
それはコードなんだろうか
とにかく規約ぐらい把握しないと無理だよね
結局出来るのはDBの設計ぐらいじゃないかと
コードも処理部分は多少使いまわせるだろうけど
619:nobodyさん
08/04/09 22:36:27 0zi6cM/k
CakePHP内でfindAll、findAllByを使っていますが、重いのでチューニングできないかと
考えています。
それで、実際に発行されているSQLと、可能であればアクセスパスを確認したいの
ですが、なにか方法がありますでしょうか。
620:nobodyさん
08/04/09 23:44:43
デバッグモードを2に変更。実行したsqlが見れます
621:619
08/04/10 00:04:23 ysAxvq3P
>>620
確認できました! ありがとうございます。
622:nobodyさん
08/04/10 10:23:53
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さん
08/04/10 10:42:01
>>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さん
08/04/10 11:29:33
>>623
レスありがとうございます
alias噛ませる方法は私も試してみたのですが
FROM `bars` AS `Bar`の宣言と被っているためエラーが返ってきます。
hasManyで繋がっている集計先テーブルの条件指定なども追加したい場合
CakePHPの作法だとどのようにするべきなのでしょうか?
625:nobodyさん
08/04/10 11:53:32 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さん
08/04/10 15:04:31
>>625
Post -> User -> Group という順番に適切なアソシエーションが設定されていれば、芋づる式にデータは取ってこれる。
やってるけど分からないなら>>620が書いているように、デバッグモードをonにしたほうがいい。
その質問の仕方だと、何をどこまでやって分からないのか分からない。
627:nobodyさん
08/04/10 22:22:07
>>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さん
08/04/10 22:25:44
まあ、SUMつかったせいで、
どこのモデルのデータかという情報が消えてしまい、
0という名前のモデル名になるってだけで
おかしいわけじゃないんだけどな。
今回はBar.hogeのSUMだからモデル名はBarになるべきだと
思うかもしれないけど、SUM(`Foo`.`hoge` + `Bar`.`hoge`) という
書き方だって出来るわけだし。
629:nobodyさん
08/04/11 00:29:36
なるほどなんで0になるんだとか悩んでた
しかし、扱いにくいのはたしかなんだよね
630:nobodyさん
08/04/11 01:18:44
BakeとかBakeryとかCheeseCakeなんていう、楽しげな製菓製パン用語の中にあって、
Scaffoldなんていう土建屋みたいなネーミングはいかがなものかねぇ。
いくらRoRのパクリとはいえ、違う名前でもよかったんじゃないかな。
なぁんて、チラシの裏w。
631:nobodyさん
08/04/11 01:32:12
じゃあスポンジケーキ?
632:nobodyさん
08/04/11 01:40:16
>>625
私も初心者ですが、私の場合はVIEWの最後に、
<?php print_r($post); ?>
というデバッグ出力を出して確認しながらやってます。
あ、確認は「ソースの表示」をした方が分かり易いかも。
秀丸など、UTF8等のキャラクタセットに対応するエディタが必要ですが。
633:nobodyさん
08/04/11 02:27:45
Vista以降はもう
NET Framework 3.0がWEBサイト最強のフレームワークになるな
PCのWEBサイトはC#じゃないと追いつけないわ
そしてPHPなどの下級言語は携帯サイトでしか使用されなくなる
634:nobodyさん
08/04/11 02:39:04
Windows Server 2008の発売で
asp.netの注目度がかなり上がってる
どう考えてもPHPから3Dにも強いasp.net(C#)に移行するだろうな
635:nobodyさん
08/04/11 02:40:09
CakePHPなんてやってる場合じゃないぞ
時代遅れ君たち
636:nobodyさん
08/04/11 04:43:59
なんだ? いきなりこいつは? 話ズレまくりで滑ってるな。
637:nobodyさん
08/04/11 04:57:27 OBoZ/5C8
>>635
代わりに、なにがいま時代の最先端なの?
638:nobodyさん
08/04/11 13:47:57
世間で何が流行ろうと、CakePHPはCakePHPでいいじゃん。
別に、すでにCakePHPで作ったものをC#に置き換える必要は
ないんだし。
639:nobodyさん
08/04/11 15:17:40
C#で作ったって動かないサーバーが多いしな。
640:nobodyさん
08/04/11 17:09:12
先輩がた教えて下さい。
mysql の max 関数を使うには cakephp ではどのようにすればよいでしょうか。
よろしくお願いします。
641:nobodyさん
08/04/11 22:44:28
$this->モデル名->クエリ(SQL文、false);
642:nobodyさん
08/04/11 23:41:35
queryは普通使わないだろw
findといえ
643:nobodyさん
08/04/12 13:37:27
>>642
自分も、するんだったらクエリ発行するしかないと思ってたんだけど、
使った事がないので書かなかった。
findでmax関数ってできるの?
644:nobodyさん
08/04/12 14:39:58
>>632
<?php echo pr($post) ?> がおすすめ
645:nobodyさん
08/04/12 15:57:22
>>643
$this->Model->find('all',array('fields'=>array('MAX(id)')));
>>644
<?php pr($post) ?>でいいよ
646:nobodyさん
08/04/12 16:42:32
cakeって、queryを使ったら死刑!くらいの気持ちが無いと駄目なの?
647:nobodyさん
08/04/12 19:44:31
だってqueryってSQL直で発行だよ?
せっかく、CakePHPのデータベース用ドライバが、
RDBMS間の差を吸収しているのに
フレームワーク使っている意味半減するじゃん。
648:nobodyさん
08/04/12 21:28:23
>>635
ある意味正解!だがまだ時代が追いついてきていない。
やっぱO/Rマッピングでは無理があるということだ
C#も3.0の言語仕様拡張で突き抜けた感があるしね
LINQとかラムダ式とかJavaの真似っこでない次元に到達した。
でも現状は糞言語PHPで本当に馬鹿みたいなコーディングするしかないけどな。
649:nobodyさん
08/04/12 21:50:24
>>648
中身がまったくない。知っている用語を羅列しただけ
自作自演の可能盛大。0点。出直しましょう。
650:nobodyさん
08/04/12 21:53:16
>>647
>> RDBMS間の差を吸収しているのに
一つのシステムに複数のRDBMSを跨ぐ様な事なんて殆どないけどな。
まぁ、極力queryを使わないほうがいいのは同意。
651:nobodyさん
08/04/12 21:55:24
同じコードで、いろんなデータベースに
対応できるってことを言っているんだろ。馬鹿か。
652:nobodyさん
08/04/12 22:14:35
素直にRailsつかったらいいのに
653:nobodyさん
08/04/12 22:22:03
railsかぁ。二年ぐらい前なら、それだけの価値はあったかもしれないが。
654:nobodyさん
08/04/12 23:15:20
DBにべったりガッツリ依存しまくってるフレームワークってないのかな
割り切った設計で可能な限り使いやすさと速度の両立を目指すという
655:nobodyさん
08/04/12 23:24:15
そのRailsだって難しい事はSQL直発行しろってスタンスだろ
Zendに至ってはプレースホルダのSQL直発行がメイン
findごときで収まるクエリだけなら世話ねーの
656:nobodyさん
08/04/13 00:28:23
だからむずかしいことだけSQL発行すればいいんだよ。
Zendの場合、O/Rマッパーそのものがない。
あれはフレームワークというよりライブラリだから。
657:nobodyさん
08/04/13 11:48:16
なんかCakePHP以前の事をお聞きするのですが・・・。
前々スレ744を参考に、$html->formTagでformタグを実装しようとしています。
ただ、検索文字列(this.search.valueの部分)に全角文字が入るため、エンコード(?)する必要が
あると思うのですが、その方法が分かりません。
やり方、もしくは、この単語でググればよい、というのを教えて下さい。
744 :nobodyさん:2007/09/15(土) 12:14:57 ID:???
> >>740
> こうですか?わかりません><
>
> $html->formTag('/post','get',array('onsubmit'=>'location.href=\'/post/\'+this.search.value;return false;'));
658:nobodyさん
08/04/13 13:07:44
<form action="/コントロール名/アクション名/" method="POST">
<input type="submit" value="検索">
入力欄は$html->inputなどを使う事
659:658
08/04/13 13:18:37
action="<?= $html->url('/コントローラ名/コントローラメソッド名')"
だった。すいません
660:657
08/04/13 14:18:45
>>659
ありがとうございます。
ただ、method=getなので、やりたかった事とはちょっと違うようで・・・。
いろいろ試したのですが、けっきょく、VIEW側は
<?php echo $html->formTag('/post/', 'get'); ?>
<input type="text" name="search" size="15">
<?php echo $html->submit('検索'); ?>
として、コントローラー側で
function search()
{
$keyword = $this->params['url']['search'];
(以下略)
として対処する事にしました。
661:nobodyさん
08/04/13 19:11:09
>>651
同じコードで、いろんなデータベースに対応できるから極力queryを使わないほうがいいって言ってんだろ。馬鹿か。
662:nobodyさん
08/04/14 02:08:03
CakePHP1.2を昨日から使い始めました。
それで、$formがまだよくわかっていないのですが、$form->radioで
1つ目にcheckedをつける場合、どのように指定すればいいのでしょうか?
<?php echo $form->radio('Bookmark.access',
array(1=>'公開','非公開'),
array('legend'=>false, 'separator'=>' ')); ?>
663:nobodyさん
08/04/14 11:45:13
>>662
inputだとこんな感じ
<?php echo $form->input('Bookmark.access', array(
'options'=>array('1'=>'public','2'=>'private','3'=>'text'),
'type'=>'radio',
'legend'=>false,
'separator'=>' ',
'value'=>'3')); ?>
たぶん、radioでもvalueをつけるといけると思う。
664:nobodyさん
08/04/14 17:25:15
radioでvalueつけると、二つ目にチェック入れて
入力エラーで戻ってきたときに、
また一つ目がチェックされるのよね。
665:nobodyさん
08/04/15 00:36:29 kB0aZEdA
Cake1.2でのAuthComponentの使い方などで、なにか良いチュートリアルがあれば教えていただけませんかー?
もし可能であれば、ACLのうまい活用の仕方もわかると嬉しいです
ペコリ
666:662
08/04/15 01:18:18
>>663
inputの例を参考に、2つ目のarrayに'value'=>'1'を追加して、うまく行きました。
ありがとうございます。
667:nobodyさん
08/04/16 13:10:23
Ver1.2でshellsの中でコンポーネント使うにはどすればいいの?
668:nobodyさん
08/04/16 16:28:26
App::importでなんでもござれだが、
そもそもshellsの中でコンポーネントを使うのが問題ではないのか?
コンポーネント = コントローラの汎用的処理、
つまり処理の内容はコントローラそのものなわけで、
シェルの中からコントローラを呼び出すというのがちょっと疑問な処理。
コントローラの処理にリダイレクトするという考えでrequestActionを
呼び出すという考えもありとは思うが、
そもそもそれはモデルにおくべき処理なのかも知れないぞ。
ちなみにシェルからモデルを扱うには、usesプロパティを使用するだけでOKだ!
669:nobodyさん
08/04/17 18:54:40 YR2rN8Sk
ところでみんなはShellsはどんな使い方してるの?
俺の場合は、定期的にcronで叩いて、指定ディレクトリに生成された大量の一次データをDBに取り込む作業、とか。
670:nobodyさん
08/04/17 19:48:58
今日はじめてcakeつかったけどさ、mysqlのセキュリティを下げないとつかえないじゃん
オワタ
671:nobodyさん
08/04/17 21:32:22
釣りに嘲笑レスだが、セキュリティを下げるって何したの?w
672:nobodyさん
08/04/17 21:35:44
>>669
旧システム(フレームワーク未使用)から新システム(CakePHP)への
データコンバートに使った。
あとは簡易なツールかな。たとえば入力した単語の単数形⇔複数形 などをするツール。
673:nobodyさん
08/04/17 21:42:54
>>671
これが釣りに見えるとは・・
おまえの知識がよくわかるわ
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
674:nobodyさん
08/04/17 22:03:43
知識うんぬん以前に、お前何も言ってないじゃん。
セキュリティを下げるというだけで、それ以外のまともな情報が何もない。
だから馬鹿にされるんだよ。
で、それのどこがセキュリティ下げてることになると思ってんの?w
互換性とセキュリティの違い、理解しようね。
675:nobodyさん
08/04/17 22:25:09
>>674
( ゚д゚)ポカーン
676:nobodyさん
08/04/17 23:10:06
>>673
どういう意味?
sql-modeをこれに設定したって事?
677:nobodyさん
08/04/18 00:13:14
>>676に書いてあることがコメントされずに初期設定されている
これをコメントアウトすることによってセキュリティを甘くせざるを得ないわけよ
このモードをはずさないとcakeのコードからワーニングがでる。
cakeに潜んでるバグで作者は修正予定らしい
678:nobodyさん
08/04/18 00:16:50
>>676
横レスですまんが、すっげぇ要するにMySQL5系の設定で
STRICT_TRANS_TABLESを指定していると、SQLの構文チェックを
厳密にするんだけど、このままだとCakePHPの吐くSQL自体でエラーが出るんよ。
んだから今の所は構文チェックを緩くしないとCakePHPが動作しないって事。
>>670の説明で分かった奴はエスパー。
679:676
08/04/18 00:24:11
>>678
の説明でようやく分かったw
680:nobodyさん
08/04/18 00:33:10
名無しのままでいいからもっといじったほうがいいよ676さんは
681:nobodyさん
08/04/18 00:34:11
1.挨拶を自分からしない・できない・やろうと思わない
2.リアルではおとなしいのにネット上では態度がでかい。
3.自分の意見で地球が動いてると思ってる。自分の意見はみんなの意見。
4.自分に非があってもスグ言い訳、逆切れ。他人を攻撃する。威嚇することで自分の弱さを隠している。
682:nobodyさん
08/04/18 01:17:05
>>678
つまり、セキュリティの問題じゃないってこと?
683:nobodyさん
08/04/18 01:18:01
>>682
つまり、日本語わかるか?
684:nobodyさん
08/04/18 01:18:11
っていうか、MySQLの仕様変更だし。
CakePHPのバグでもセキュリティの問題でもない。
685:nobodyさん
08/04/18 01:27:47 UgH30Z6m
アホが大量発生しとりますな。
CakePHPとはスレ違いだし
686:nobodyさん
08/04/18 01:28:35
まあ、>>670がアフォってことでいいじゃんかw
687:nobodyさん
08/04/18 01:46:12
>>673のsql-modeの値がデフォルトになっているのは、
Windows板でインストーラーを使ってインストールした場合のみ。
本当のデフォルトの値は厳密モードじゃありません。
いい加減Windowsは卒業しろよw
688:nobodyさん
08/04/18 02:46:06
>>682
んーと、SQLインジェクションとか攻撃者が故意に行うものとは違うんだけど、
まぁ広義の意味でセキュリティの問題だとは思うよ。
つーのも、MySQL4系ってあれなのよ、予め決めたカラムの型よりデカいデータ食わせると
勝手に型に合わせてデータ削って無理やり挿入してくれちゃうのよ。
例えばvarchar(4)でカラム作ってそこに"unkotintin"ってデータ突っ込んでも、うんこしか保存されないわけ。
他にも''をNULLと解釈してくれたり、2008-02-31を許容してくれたりと
入力データに対して大変大らかな実装なんよね。
で、それってちょっとマズいだろ、入力データが型に合ってない=異常事態なんだから
強制保存すんな!ロールバックしろヴォケ!と思う人も当然いる訳で
そんな感じの背景があってMySQL5系から型チェックを厳しくするモードが実装されたと。
CakePHPの場合だと、INSERTする時にidの数字をauto_incrementに任せる訳だけど、
そこで発行されるSQLがid = ''って指定されてるから「そこ文字列入れる所じゃねーよ!」って怒られる。
んだからセキュリティホールよろしく第三者に直接叩かれるって心配はないよ。
余談だけど、STRICT_TRANS_TABLESはInnoDBとかトランザクションをサポートしてねーと使えねーべ。
MyISAMで構文チェックさせる時はSTRICT_ALL_TABLESなー。
689:nobodyさん
08/04/18 04:25:34
それってセキュリティとは言わないと思う
690:nobodyさん
08/04/18 04:45:08
.thtml 派? .ctp派?
今でもぼくは
.thtml 派。
691:nobodyさん
08/04/18 08:30:04
>>690
1.1系から乗り換えた当初は.thtmlにこだわってたけど(てか気づかなかった…)
.ctpに切り替えたら1日で慣れた
やっぱり5文字の拡張子は長すぎるよね
692:nobodyさん
08/04/18 08:37:15
>>689
だから広義の意味っつってんじゃん。日本語理解できてる?
Perlでコードの安全性を高めるためにuse strict;するのと一緒だよ
693:nobodyさん
08/04/18 09:07:33
>>691
レスまんくす!
では、僕も次のサイト作りから ctp 派 になります♪
694:nobodyさん
08/04/18 09:12:53
>>692
広義の意味でもセキュリティの問題じゃない。
俺俺定義すんなw
695:nobodyさん
08/04/18 09:15:03
>>692
広義といえばどんな主張でも通ると思ってる厨房発見。
696:nobodyさん
08/04/18 15:39:38
メールフォームとかで
//入力画面
function form(){
}
//確認画面
function confirm(){
//バリデーションでエラーの場合、フォームに戻す
if(!$this->Form->validates($this->data)){
$this->set('data',$this->data);
$this->render('form');
}
}
//完了画面
function send(){
}
form.thtml
<?php echo $html->input('Form/name',array('value' => $data['Form']['name'])); ?>
の構成の場合、最初に form にアクセスすると $data['Form']['name'] がない!
とNoticeエラーが出てしまいます。
これって、 form() で初期化した $data を与えるしかないのでしょうか?
入力項目がいっぱいあるとめちゃくちゃ大変な気がするのですが…。
697:nobodyさん
08/04/18 16:19:29
findByなどで、hasManyでくっついてきたレコード数をカウントしたい場合、
どのようにすればよいのでしょうか?
698:nobodyさん
08/04/18 18:21:08
1.1系でmode内でorderとかconditionを設定できないの?
class Post extends AppModel {
protected $order = "Post.created DESC";
とかでfindしても駄目なんです。
699:698
08/04/18 18:21:29
すいませんmodel内でです
700:698
08/04/18 19:03:12
もう少し分かりやすく言うと、モデル内でSQLの検索条件(where句)に縛りを入れたいです。
701:nobodyさん
08/04/18 19:27:37
うっ・・・だめ。もう・・もう・・・もうでる。 モデル
702:nobodyさん
08/04/18 19:50:15
モデル内に
function find_name_only($cond = "name like '%tarou%'"){
return $this->findAll($cond);
}
を書いてごまかしてみました。
ほかにいい方法があるのでしょうか?
703:nobodyさん
08/04/18 20:00:26
>>696
まだ始めて2週間しかたってないけど。
form.thtml
<?php echo $html->input('Form/name'); ?>
で、どう?
あと、$this->set('data',$this->data); は、要らないとおも
704:nobodyさん
08/04/18 20:05:29
>>697
count( $model['Model']['HasManyModel'] )
かな?
705:697
08/04/18 21:22:22
>>704
これは取り出した後で、PHPのcount関数で配列の要素数をカウント、ということでしょうか?
そうではなくて、
たとえばfindAllするときに取得順などにHasManyModelのカウント数を使いたいのですが。
質問の文章がわかりづらくて申し訳ありません;
よろしくお願いします。
706:nobodyさん
08/04/18 21:42:58
>>705
おそらく、自分でクエリを書かないといけないでしょうね。
707:697
08/04/18 21:47:07
>>705
やはりそうですか;
せっかくフレームワークを使っているのでできればクエリは書きたくないですね・・・
UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;
708:nobodyさん
08/04/19 01:00:18
> UsersをPostsの多い順に並べ替える、
やってないけど、これは、findAllの条件にexistsなんたらって書いて
countだせばいいとだろうから、一応findAllは使えるな。
半分ぐらいしか意味ないけど。
709:nobodyさん
08/04/19 01:16:45
>>707
それか、1回データを取り出した後で件数をキーにした連想配列に入れかえるのはどうでしょうか。
配列の添え字を、
$array[$count .' - ' .$id]
こんな感じにして配列をソートしたら出来そうですが。
710:nobodyさん
08/04/19 10:26:43
>>707
> UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;
ちょうど同じような事例を考えていた。
顧客とその顧客の取引データが一対多でつながっている場合に
取引が多い顧客を見たいと。
で、いろいろ考えたんだが、顧客数や取引が多くなると重くなりそうなので、
(だって内部的には顧客ごとにデータ数えて、その数でソートするんだろう!?)
非正規化することになるが、顧客データの中に取引数フィールドを作ることにした。
あとは取引データ保存時、つまりモデルのafterSave時に、
顧客テーブルの取引数フィールドをいじればいいと。
フレームワークを使っているとこういうトリガー的なことを
データベースに依存せずにやれるから良いね。
711:697
08/04/19 11:37:16
>>ちょうど同じような事例を考えていた。
奇遇です!
なるほど・・・あえて非正規化する、と。
手元にある参考書に
「処理効率を考えて、あえて非正規化することもある」
と書いてあった意味がわかりました。
たしかに、毎回自分でクエリ書くのに比べたら、
冗長なデータを持っておくくらい、なんてことないですね!
目からウロコでした!
712:nobodyさん
08/04/19 11:39:14
DB使ってる意味ねぇw
713:697
08/04/19 11:50:08
>>712
では、他に何かいいアイデアがあるのですか?
714:nobodyさん
08/04/19 12:22:29
俺は自分でクエリを書いたほうが断然面白い。
715:nobodyさん
08/04/19 12:31:41
1.2を入れてみたのですが、
function index() {
$data = "テスト";
$this->set('data', $data);
}
とやっただけで
Allowed memory size of xxx bytes exhausted ...
が出てしまいます;
CakePHP叩きではなく、本当に困っています。
対処法を教えてください。
716:nobodyさん
08/04/19 12:38:01
>>715
その程度のコードで、そのエラーが出るときは、
基本的にバグだと思ったほうが良い。
まあ環境のせいもあるからとりあえず聞くけど、
OSとPHPのバージョンと、php.iniの設定(もしくはini_get('memory_limit'))の値)
function index() {
echo 'aaa';exit;
}
とやるとどうなるか。
index()以外のコードはどうなっているか。
717:nobodyさん
08/04/19 12:42:21
>>712
> DB使ってる意味ねぇw
DB使うことが目的じゃないからね。
DBは所詮データの保存先に過ぎないし。
718:715
08/04/19 12:47:34
>>716
レスありがとうございます。
どうやらbakeで生成したビューをそのまま使っていたことが原因だったようです;
スレを汚してしまってすみません;;
719:nobodyさん
08/04/19 13:08:09
>>717
じゃファイルベースでやりゃいいじゃん。やらない理由は?
720:nobodyさん
08/04/19 14:35:19
CakePHP でPEARを使うとき
依存PEARがうまく発見できないのですが、
どうすればよいのでしょうか?
php.iniのinclude_pathには
app/vendorsを追加してあります。
721:nobodyさん
08/04/19 17:44:54
>>719
> じゃファイルベースでやりゃいいじゃん。やらない理由は?
フレームワークがファイルベースに対応していないから。
(読み書きできないということではなく、モデルが対応していないということ)
722:720
08/04/19 18:05:22
すんません;
事故解決しました。
723:nobodyさん
08/04/19 19:37:01
>フレームワークがファイルベースに対応していないから。
ユーザが自由に選択することもできないってこと?
強制的にDB使用?
CakePHP糞FWすぎるwwwww
724:nobodyさん
08/04/19 20:20:16
流れ読まずにすみません。
CakePHPで作られてるサイトで有名なところを見てみたいのですが、
教えていただけませんか?
たしかNiftyのなんかがCakeだと聞きましたが・・・
725:nobodyさん
08/04/19 21:00:48
mozillaのサイトとか
726:nobodyさん
08/04/19 23:46:04
>>723
君頭大丈夫かね?
CakePHPは別にデータベースを使用する必要は無い。
ただデータベースを使ったほうが効率がいいだけだ。
それがファイルベースでやらない理由。
どうやら君は素人なのだろう。
727:nobodyさん
08/04/20 00:01:18
>>711
非正規化は、一般的な業務システムでもよくやるな。
ただ、明らかに正規化をさぼってて、テーブルのカラム数が100個超えているのを
「性能を考えて非正規化している」と言い張る人はカンベンしてほしい。
あぁごめん。cakePHPの話から逸脱した。
>>723
どこか忘れたけど、コントローラあたりの設定で、DBを使わないようにもできたはず。
だれか補足頼むw
特殊な使い方でもしない限り、あんましメリットはなさそうだね。
728:nobodyさん
08/04/20 00:32:54
>>726
相手を見下さないと精神を保てない糞FWユーザ涙目www
729:nobodyさん
08/04/20 00:33:33
図星だったのか? その反応は。
730:nobodyさん
08/04/20 00:34:22
モデルが貧弱なCodeIgnitorよりは
CakePHPの方が実用的に見て優れているな。
731:nobodyさん
08/04/20 00:46:44
>>728
フレームワークに問題が無い話をしているのに
糞FWとか言っているようじゃ
説得力皆無だゾ
732:nobodyさん
08/04/20 01:31:23
>>723
だからDB使わない事もできるって。
デフォルト設定がDB使用になってるだけで、全然強制じゃない。
URLリンク(www.1x1.jp)
ファイルベースの設定方法は、わざわざ書かなくてもいいよね?
>730
CodeIgnitorを使いたい人は使えばいいし、CakePHPを使いたい人は
使えばいいし、それだけの事。
CodeIgnitorは機能が少ない分、実装がシンプルで軽いのが特徴なんだから、
機能的に足りていれば、そっちでもいいでしょ。
733:nobodyさん
08/04/20 01:35:00
ちいたん最強
734:nobodyさん
08/04/21 16:11:05 Hc1e0Bqc
追加の検証が必要な不確実な情報
俺のコードに問題がある可能性もあり。
1.2.0.6311-beta のデフォルトのセッション管理(ファイルベース?)
Configure::write('Session.save', 'cake');
のとき、同時に複数のアクセスがあるとロックされるかもしれない。
つまり、一つの目のアクセスで長い処理を行っていると
二つ目のアクセスがロックされ一つ目が終わるまで実行されない。
Session->read()で待たされる。
Configure::write('Session.save', 'database');にして
DBベースのセッションにするととりあえず回避できる。
関係ないとは思うがPostgreSQLの場合。
735:nobodyさん
08/04/21 16:34:17
PhpNutいなくなっちゃったの?
736:734
08/04/21 19:37:53
よく考えたら、ロックされるほうが正しいのか。
アクセスしたユーザーはロックされるが
他の人(ようするにセッションファイルが違う人)は
ロックされないようだ
737:nobodyさん
08/04/22 13:08:38
初歩的な質問で申し訳ありません。
bakeで作ったコントローラをみると
$this->Session->setFlash(__('hogehoge.', true));
のようなコードがありますが
この__() や後ろのtrueは何を意味しているのでしょうか?
もしかするとcakePHPに限ったことではないかもしれませんが、
よろしくお願いします。
738:nobodyさん
08/04/22 15:52:58
>>737
多言語化機能。
/app/locale/jpn/LC_MESSAGE とその周辺あたりに言語ファイル
.po や .mo を置くと、hogehogeが翻訳される。
多くはビューで使われるため、<?php __('hogehoge') ?> と簡便に書くことが出来るようになっている。
この場合、言語ファイルがあると、hogehogeが翻訳されて”出力”される。
第二引数にtrueを指定すると出力せずに戻り値として返すという意味。
これと似たやり方は、CakePHPだけでなく、PHP以外でも良く使われ
多くは _('hogehoge')という書き方をする。
PHPではgettext関数の別名として_()関数が使用できる。
URLリンク(jp.php.net)
CakePHPではこのやり方を独自に拡張しており、
関数名がアンダーバー二つになっている。
739:nobodyさん
08/04/22 15:54:09
おまけ。翻訳手順。poeditを使った場合。
1.ソースコードやビューの中の翻訳したい文字列を__('hogehoge')という書き方にする。
2.cake i18n extractツールを使うと、ソースコードの中から__()の部分を抽出、.potファイルを生成してくれる。
3.poeditなどのツールを使い、.potファイルを取り込み、.poを作る。
4..poを編集して翻訳リストを作っていく。
5.最後に.poを.moにコンパイルする。.moが最終的な翻訳ファイル。poeditの場合.poを保存したら.moも出来る。
6.新たに単語が増えたときは、2の手順で再度.potファイルを生成する。
7.poeditで今使っている.poに.potファイルを追加取り込みをする。ちゃんと差分だけが取り込まれる。削除された単語も.poファイルに残っている。
8.再度翻訳して保存。.moを作る。
ファイルの意味をまとめると、
.pot・・・単語のリスト(今現在使用している単語を抽出するテキストファイル)
.po・・・作業ファイル(過去に使用して、今は削除している単語の翻訳情報なども残っているテキストファイル)
.mo・・・翻訳ファイル(作業ファイルに残っているいろいろな無駄が取り除かれたバイナリファイル)
※ 実はCakePHPは .mo が無くても .po を直接翻訳ファイルとして使える。
740:nobodyさん
08/04/22 18:29:42
>>737
いい質問。俺も初めてしった。
>>738,739
素敵だわぁ
741:737
08/04/22 18:43:22
>>738-9
丁寧なレスをありがとうございます。
CakePHPにはまだまだ知らない機能があるんですね。
いろいろ楽しみです。
742:737
08/04/22 18:44:53
アンカーの付け方間違えました・・・
マウスオーバーしないようにお願いします;;
743:739
08/04/22 18:56:32
一つ言い忘れた。.pot .po .mo とかの .で始まるやつは
ドットで始まるファイルではなく、拡張子という意味で書いた。
デフォルトではdefault.poやdefault.mo になる。
それぞれのファイルのdefaultの部分を変更することも可能。
abc.mo の場合、その場合、__d('abc', 'hogehoge') という書き方で
出来ると思うがやったこと無いので/cake/basics.phpでもよんどくれ。
744:新参者
08/04/23 05:59:57
ブラクラするんだけど、俺だけ?
メニューを選んで、表示し終わる前にサイト内検索する。(Specialofferとか)
URLリンク(www.islandcruises.com)
OS: WinXP sp2
Browser: IE7
CPU: Core2 6300
Memory: 2G
Service: xampp
CakePHP 1.2で開発中なので、こういうの見るとビビっちまう・・・
745:744
08/04/23 06:23:11
追記:
キャッシュクリア後とかに、
zeroで検索するとハングしやすい。
firefoxだと大丈夫なので、IE7の仕業くさいな。
調べてくるか・・・
746:702
08/04/24 18:22:26
>>698-702
の流れから結局、model内でfindAllをオーバライドしてみたがなんかアソシエーション組んでるほかのモデルまで影響しているような気がする・・。
function findAll($conditions=null, $fields=null, $order=null, $limit=null, $page=1, $recursive=null){
if(isset($conditions) && is_array($conditions)){
array_unshift($conditions,"name like '%" . USER_NAME . "%'");
}else{
$conditions = array("name like '%" . USER_NAME . "%'");
}
return parent::findAll($conditions, $fields, $order, $limit, $page, $recursive);
}
747:nobodyさん
08/04/24 22:39:06
>>746
1.1ってbeforeFindなかったっけ?
748:702
08/04/25 12:38:51
>>747
ありがとう、まじでありがとう
749:nobodyさん
08/04/26 13:26:12
URLを読み込む以外に、CakePHP外部から
CakePHPの関数とか呼ぶ方法内ですかね?
具体的に言うと、もともとウェブサイトがCMSで構築されており、
新たにCakePHPを使ったウェブシステムを追加したわけですが、
そのCMSのページ上にCakePHPシステムの情報・・・会員ユーザー名などを
表示させたいのです。
750:nobodyさん
08/04/26 13:30:26
好きなようにDB叩けばいいんじゃまいか?
751:nobodyさん
08/04/26 14:52:38 CCA4AGBq
Shellsでしょう
752:nobodyさん
08/04/26 21:38:26 Uwx0xpWG
セッションがクリアされてしまってハマった。
ネットで検索すると、存在していないcssや画像ファイルがあると消え、
htaccessでの設定で回避できるということだった。
css、画像ファイルのパスと存在が正しいことを確認、
htaccessファイルの設定も修正してみたが、セッションはクリアされたまま。
たすけて。
753:nobodyさん
08/04/26 22:33:41
>>752
CakePHPのバージョンはいくつ?
こんなのがあった。
URLリンク(cakephp.jp)
ちなみに、初めてセッションを使おうといろいろ調べてるんだけど、参考になる
サイトあったら情報きぼう。
とりあえずこのあたりを参照中。
URLリンク(cakephp.jp)
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)
URLリンク(develop.ddo.jp)
URLリンク(sand-man.blog.so-net.ne.jp)
754:753
08/04/26 22:35:08
ごめん。よくみると全然関係なさそうだね。
755:nobodyさん
08/04/26 22:37:46
>>753は読まずに答えてみる。的外れかも。
えーと、core.phpだっけ? セキュリティレベルを設定するところ。
あそこが一番高いと、接続するたびに、セッションIDが変更される。
だから途中でエラー?とかあると、サーバー側ではセッションIDの情報が変わっているのに
クライアントでは新しいセッションIDをもらきれておらず、セッションIDが切断=クリアされてしまう。
だから俺はセキュリティレベルを中にした。
756:755
08/04/26 22:41:33
URLリンク(cakephp.jp)
> slywalker 投稿日時: 2007-11-5 12:58
この人と同じこと。
757:nobodyさん
08/04/26 23:10:06 Uwx0xpWG
CAKE_SECURITYを、'medium'にしてやってみたけどダメでした。
セションをwriteした直後にreadしてみたら、ちゃんと設定されてるのは確認できたんですけどね。
次の画面でreadすると空になってる。ん~困った。
758:nobodyさん
08/04/26 23:38:17
まさかブラウザ側の問題ってことは・・・
セキュリティソフトとか。
759:nobodyさん
08/04/26 23:42:15
writeした直後にreadしてちゃんと設定されていると
確認するのはあまり意味無いよ。
なぜなら、情報が実際にセットされるのは
ブラウザにクッキー情報が返ってからだから。
ieHTTPHeadersやLive Http headers
ブラウザのクッキー情報を見るツールを使って
調べてみよう。
760:nobodyさん
08/04/27 00:07:57
あっそうだ。セッションの方式にはどれを使っている? cakephp、php、database?
自分の使い方の問題もあるだろうけど、databaseがなんかうまくいかなかった。
761:nobodyさん
08/04/27 00:41:14 DD3/O3h6
セッション方式(CAKE_SESSION_SAVE)は、"php"です。
いま↓を見てるんだけど、aタグによるリンクで画面遷移させるので、
セッションIDを付加しないといけないことがわかった。
URLリンク(cakephp.jp)
これからやってみます。
762:nobodyさん
08/04/27 02:40:18
cake1.2.0.6311使ってますが、
sqlのCASEはquery対処なんかなあ。$optionsでいけたりする?
763:761
08/04/28 00:00:23
自己レスだけど、携帯サイトの場合、Cookieが使えない携帯端末があるから
URLにセッションIDを付加する方法でやるしかない。
PCサイトの場合は、セッションハイジャックの危険性があるからURLへのセッションID付加は使えない。
結局、セッションを使わずcookieで運用する方法で実装しました。
本来の意味でのセッションではなく、単なるデータの引き継ぎ用途なので、cookieでよいかと。
764:nobodyさん
08/04/28 20:32:23
「セッションハイジャックが毎日行われています」
スレリンク(php板:236-249番)
765:nobodyさん
08/04/29 00:30:20
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
766:nobodyさん
08/04/29 00:50:53
>>765
何かバグにぶち当たったのかもしれんけど、こんな風にいい逃げする
荒らしもいるしなぁ。
本当に困ってるのなら、具体的なバグ例を挙げてみるといいよ。
そしたら対処方法も出るかもしれないし。
話は変わるけど、前のレスでも出てたし、みんな知ってるのかもしれないけど、
このサイトいいね。参考になる。
テンプレに載せてもいいんじゃない?
URLリンク(bakery.cakephp.org)
767:nobodyさん
08/04/29 02:39:08
お決まりですので・・・
宣伝乙^^
768:nobodyさん
08/05/01 10:47:29 oWWm9vMD
hasMany定義しているModelで、子のデータが更新されたら、そのmodifiedで
親のmodifiedを更新したいのですが、どのようにすればいいでしょうか?
子のデータ更新をするcontrollerでいっしょに更新しようとしたのですが、
上手くいきませんでした。
32 function edit($id = null)
33 {
34 $this->Response->id = $id;
35 $thread_id = $this->Response->field('thread_id');
36
37 if ($this->Response->saveField('cooking_name',$this->data['Response']['cooking_name']))
38 {
39 $this->Thread->saveField('modified',$this->data['Response']['modified']);
40 $this->redirect( '/responses/view/'. $thread_id . '#' . $id);
41 }
42 }
modelはこの通りです。
7 var $belongsTo = array('Thread' =>
8 array('className' => 'Thread',
9 'conditions' => '',
10 'order' => '',
11 'foreignKey' => 'thread_id'));
769:nobodyさん
08/05/01 13:48:12
>>768
39行目はupdateじゃなくて、insertされてない?