[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 03/21 03:13 / Filesize : 213 KB / Number-of Response : 845
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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/


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:???]
じゃあスポンジケーキ?

632 名前:nobodyさん mailto:sage [2008/04/11(金) 01:40:16 ID:???]
>>625

私も初心者ですが、私の場合はVIEWの最後に、

<?php print_r($post); ?>

というデバッグ出力を出して確認しながらやってます。

あ、確認は「ソースの表示」をした方が分かり易いかも。
秀丸など、UTF8等のキャラクタセットに対応するエディタが必要ですが。

633 名前:nobodyさん mailto:sage [2008/04/11(金) 02:27:45 ID:???]
Vista以降はもう
NET Framework 3.0がWEBサイト最強のフレームワークになるな
PCのWEBサイトはC#じゃないと追いつけないわ
そしてPHPなどの下級言語は携帯サイトでしか使用されなくなる

634 名前:nobodyさん mailto:sage [2008/04/11(金) 02:39:04 ID:???]
Windows Server 2008の発売で
asp.netの注目度がかなり上がってる
どう考えてもPHPから3Dにも強いasp.net(C#)に移行するだろうな



635 名前:nobodyさん mailto:sage [2008/04/11(金) 02:40:09 ID:???]
CakePHPなんてやってる場合じゃないぞ
時代遅れ君たち

636 名前:nobodyさん mailto:sage [2008/04/11(金) 04:43:59 ID:???]
なんだ? いきなりこいつは? 話ズレまくりで滑ってるな。

637 名前:nobodyさん [2008/04/11(金) 04:57:27 ID:OBoZ/5C8]
>>635
代わりに、なにがいま時代の最先端なの?

638 名前:nobodyさん mailto:sage [2008/04/11(金) 13:47:57 ID:???]
世間で何が流行ろうと、CakePHPはCakePHPでいいじゃん。

別に、すでにCakePHPで作ったものをC#に置き換える必要は
ないんだし。

639 名前:nobodyさん mailto:sage [2008/04/11(金) 15:17:40 ID:???]
C#で作ったって動かないサーバーが多いしな。

640 名前:nobodyさん mailto:sage [2008/04/11(金) 17:09:12 ID:???]
先輩がた教えて下さい。

mysql の max 関数を使うには cakephp ではどのようにすればよいでしょうか。
よろしくお願いします。

641 名前:nobodyさん mailto:sage [2008/04/11(金) 22:44:28 ID:???]
$this->モデル名->クエリ(SQL文、false);

642 名前:nobodyさん mailto:sage [2008/04/11(金) 23:41:35 ID:???]
queryは普通使わないだろw
findといえ

643 名前:nobodyさん mailto:sage [2008/04/12(土) 13:37:27 ID:???]
>>642
自分も、するんだったらクエリ発行するしかないと思ってたんだけど、
使った事がないので書かなかった。

findでmax関数ってできるの?

644 名前:nobodyさん mailto:sage [2008/04/12(土) 14:39:58 ID:???]
>>632

<?php echo pr($post) ?> がおすすめ



645 名前:nobodyさん mailto:sage [2008/04/12(土) 15:57:22 ID:???]
>>643
$this->Model->find('all',array('fields'=>array('MAX(id)')));


>>644
<?php pr($post) ?>でいいよ

646 名前:nobodyさん mailto:sage [2008/04/12(土) 16:42:32 ID:???]
cakeって、queryを使ったら死刑!くらいの気持ちが無いと駄目なの?

647 名前:nobodyさん mailto:sage [2008/04/12(土) 19:44:31 ID:???]
だってqueryってSQL直で発行だよ?
せっかく、CakePHPのデータベース用ドライバが、
RDBMS間の差を吸収しているのに
フレームワーク使っている意味半減するじゃん。

648 名前:nobodyさん mailto:sage [2008/04/12(土) 21:28:23 ID:???]
>>635
ある意味正解!だがまだ時代が追いついてきていない。

やっぱO/Rマッピングでは無理があるということだ
C#も3.0の言語仕様拡張で突き抜けた感があるしね
LINQとかラムダ式とかJavaの真似っこでない次元に到達した。

でも現状は糞言語PHPで本当に馬鹿みたいなコーディングするしかないけどな。

649 名前:nobodyさん mailto:sage [2008/04/12(土) 21:50:24 ID:???]
>>648
中身がまったくない。知っている用語を羅列しただけ
自作自演の可能盛大。0点。出直しましょう。

650 名前:nobodyさん mailto:sage [2008/04/12(土) 21:53:16 ID:???]
>>647
>> RDBMS間の差を吸収しているのに

一つのシステムに複数のRDBMSを跨ぐ様な事なんて殆どないけどな。
まぁ、極力queryを使わないほうがいいのは同意。


651 名前:nobodyさん mailto:sage [2008/04/12(土) 21:55:24 ID:???]
同じコードで、いろんなデータベースに
対応できるってことを言っているんだろ。馬鹿か。

652 名前:nobodyさん mailto:sage [2008/04/12(土) 22:14:35 ID:???]
素直にRailsつかったらいいのに

653 名前:nobodyさん mailto:sage [2008/04/12(土) 22:22:03 ID:???]
railsかぁ。二年ぐらい前なら、それだけの価値はあったかもしれないが。

654 名前:nobodyさん mailto:sage [2008/04/12(土) 23:15:20 ID:???]
DBにべったりガッツリ依存しまくってるフレームワークってないのかな
割り切った設計で可能な限り使いやすさと速度の両立を目指すという



655 名前:nobodyさん mailto:sage [2008/04/12(土) 23:24:15 ID:???]
そのRailsだって難しい事はSQL直発行しろってスタンスだろ
Zendに至ってはプレースホルダのSQL直発行がメイン

findごときで収まるクエリだけなら世話ねーの

656 名前:nobodyさん mailto:sage [2008/04/13(日) 00:28:23 ID:???]
だからむずかしいことだけSQL発行すればいいんだよ。

Zendの場合、O/Rマッパーそのものがない。
あれはフレームワークというよりライブラリだから。

657 名前:nobodyさん mailto:sage [2008/04/13(日) 11:48:16 ID:???]
なんか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さん mailto:sage [2008/04/13(日) 13:07:44 ID:???]
<form action="/コントロール名/アクション名/" method="POST">

<input type="submit" value="検索">

入力欄は$html->inputなどを使う事

659 名前:658 mailto:sage [2008/04/13(日) 13:18:37 ID:???]
action="<?= $html->url('/コントローラ名/コントローラメソッド名')"

だった。すいません

660 名前:657 mailto:sage [2008/04/13(日) 14:18:45 ID:???]
>>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さん mailto:sage [2008/04/13(日) 19:11:09 ID:???]
>>651
同じコードで、いろんなデータベースに対応できるから極力queryを使わないほうがいいって言ってんだろ。馬鹿か。


662 名前:nobodyさん mailto:sage [2008/04/14(月) 02:08:03 ID:???]
CakePHP1.2を昨日から使い始めました。
それで、$formがまだよくわかっていないのですが、$form->radioで
1つ目にcheckedをつける場合、どのように指定すればいいのでしょうか?


<?php echo $form->radio('Bookmark.access',
array(1=>'公開','非公開'),
array('legend'=>false, 'separator'=>' ')); ?>


663 名前:nobodyさん mailto:sage [2008/04/14(月) 11:45:13 ID:???]
>>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さん mailto:sage [2008/04/14(月) 17:25:15 ID:???]
radioでvalueつけると、二つ目にチェック入れて
入力エラーで戻ってきたときに、
また一つ目がチェックされるのよね。



665 名前:nobodyさん [2008/04/15(火) 00:36:29 ID:kB0aZEdA]
Cake1.2でのAuthComponentの使い方などで、なにか良いチュートリアルがあれば教えていただけませんかー?
もし可能であれば、ACLのうまい活用の仕方もわかると嬉しいです
ペコリ

666 名前:662 mailto:sage [2008/04/15(火) 01:18:18 ID:???]
>>663
inputの例を参考に、2つ目のarrayに'value'=>'1'を追加して、うまく行きました。
ありがとうございます。

667 名前:nobodyさん mailto:sage [2008/04/16(水) 13:10:23 ID:???]
Ver1.2でshellsの中でコンポーネント使うにはどすればいいの?

668 名前:nobodyさん mailto:sage [2008/04/16(水) 16:28:26 ID:???]
App::importでなんでもござれだが、
そもそもshellsの中でコンポーネントを使うのが問題ではないのか?

コンポーネント = コントローラの汎用的処理、
つまり処理の内容はコントローラそのものなわけで、
シェルの中からコントローラを呼び出すというのがちょっと疑問な処理。

コントローラの処理にリダイレクトするという考えでrequestActionを
呼び出すという考えもありとは思うが、
そもそもそれはモデルにおくべき処理なのかも知れないぞ。
ちなみにシェルからモデルを扱うには、usesプロパティを使用するだけでOKだ!

669 名前:nobodyさん [2008/04/17(木) 18:54:40 ID:YR2rN8Sk]
ところでみんなはShellsはどんな使い方してるの?
俺の場合は、定期的にcronで叩いて、指定ディレクトリに生成された大量の一次データをDBに取り込む作業、とか。



670 名前:nobodyさん mailto:sage [2008/04/17(木) 19:48:58 ID:???]
今日はじめてcakeつかったけどさ、mysqlのセキュリティを下げないとつかえないじゃん
オワタ

671 名前:nobodyさん mailto:sage [2008/04/17(木) 21:32:22 ID:???]
釣りに嘲笑レスだが、セキュリティを下げるって何したの?w

672 名前:nobodyさん mailto:sage [2008/04/17(木) 21:35:44 ID:???]
>>669
旧システム(フレームワーク未使用)から新システム(CakePHP)への
データコンバートに使った。

あとは簡易なツールかな。たとえば入力した単語の単数形⇔複数形 などをするツール。

673 名前:nobodyさん mailto:sage [2008/04/17(木) 21:42:54 ID:???]
>>671
これが釣りに見えるとは・・
おまえの知識がよくわかるわ
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

674 名前:nobodyさん mailto:sage [2008/04/17(木) 22:03:43 ID:???]
知識うんぬん以前に、お前何も言ってないじゃん。
セキュリティを下げるというだけで、それ以外のまともな情報が何もない。
だから馬鹿にされるんだよ。

で、それのどこがセキュリティ下げてることになると思ってんの?w
互換性とセキュリティの違い、理解しようね。



675 名前:nobodyさん mailto:sage [2008/04/17(木) 22:25:09 ID:???]
>>674
( ゚д゚)ポカーン


676 名前:nobodyさん mailto:sage [2008/04/17(木) 23:10:06 ID:???]
>>673

どういう意味?
sql-modeをこれに設定したって事?

677 名前:nobodyさん mailto:sage [2008/04/18(金) 00:13:14 ID:???]
>>676に書いてあることがコメントされずに初期設定されている
これをコメントアウトすることによってセキュリティを甘くせざるを得ないわけよ
このモードをはずさないとcakeのコードからワーニングがでる。
cakeに潜んでるバグで作者は修正予定らしい

678 名前:nobodyさん mailto:sage [2008/04/18(金) 00:16:50 ID:???]
>>676
横レスですまんが、すっげぇ要するにMySQL5系の設定で
STRICT_TRANS_TABLESを指定していると、SQLの構文チェックを
厳密にするんだけど、このままだとCakePHPの吐くSQL自体でエラーが出るんよ。

んだから今の所は構文チェックを緩くしないとCakePHPが動作しないって事。

>>670の説明で分かった奴はエスパー。

679 名前:676 mailto:sage [2008/04/18(金) 00:24:11 ID:???]
>>678
の説明でようやく分かったw

680 名前:nobodyさん mailto:sage [2008/04/18(金) 00:33:10 ID:???]
名無しのままでいいからもっといじったほうがいいよ676さんは

681 名前:nobodyさん mailto:sage [2008/04/18(金) 00:34:11 ID:???]
1.挨拶を自分からしない・できない・やろうと思わない
2.リアルではおとなしいのにネット上では態度がでかい。
3.自分の意見で地球が動いてると思ってる。自分の意見はみんなの意見。
4.自分に非があってもスグ言い訳、逆切れ。他人を攻撃する。威嚇することで自分の弱さを隠している。

682 名前:nobodyさん mailto:sage [2008/04/18(金) 01:17:05 ID:???]
>>678
つまり、セキュリティの問題じゃないってこと?

683 名前:nobodyさん mailto:sage [2008/04/18(金) 01:18:01 ID:???]
>>682
つまり、日本語わかるか?

684 名前:nobodyさん mailto:sage [2008/04/18(金) 01:18:11 ID:???]
っていうか、MySQLの仕様変更だし。
CakePHPのバグでもセキュリティの問題でもない。



685 名前:nobodyさん [2008/04/18(金) 01:27:47 ID:UgH30Z6m]
アホが大量発生しとりますな。
CakePHPとはスレ違いだし

686 名前:nobodyさん mailto:sage [2008/04/18(金) 01:28:35 ID:???]
まあ、>>670がアフォってことでいいじゃんかw

687 名前:nobodyさん mailto:sage [2008/04/18(金) 01:46:12 ID:???]
>>673のsql-modeの値がデフォルトになっているのは、
Windows板でインストーラーを使ってインストールした場合のみ。
本当のデフォルトの値は厳密モードじゃありません。

いい加減Windowsは卒業しろよw

688 名前:nobodyさん mailto:sage [2008/04/18(金) 02:46:06 ID:???]
>>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さん mailto:sage [2008/04/18(金) 04:25:34 ID:???]
それってセキュリティとは言わないと思う

690 名前:nobodyさん mailto:sage [2008/04/18(金) 04:45:08 ID:???]
.thtml 派? .ctp派?

今でもぼくは

.thtml 派。

691 名前:nobodyさん mailto:sage [2008/04/18(金) 08:30:04 ID:???]
>>690
1.1系から乗り換えた当初は.thtmlにこだわってたけど(てか気づかなかった…)
.ctpに切り替えたら1日で慣れた

やっぱり5文字の拡張子は長すぎるよね

692 名前:nobodyさん mailto:sage [2008/04/18(金) 08:37:15 ID:???]
>>689
だから広義の意味っつってんじゃん。日本語理解できてる?
Perlでコードの安全性を高めるためにuse strict;するのと一緒だよ

693 名前:nobodyさん mailto:sage [2008/04/18(金) 09:07:33 ID:???]
>>691
レスまんくす!

では、僕も次のサイト作りから ctp 派 になります♪

694 名前:nobodyさん mailto:sage [2008/04/18(金) 09:12:53 ID:???]
>>692
広義の意味でもセキュリティの問題じゃない。
俺俺定義すんなw



695 名前:nobodyさん mailto:sage [2008/04/18(金) 09:15:03 ID:???]
>>692
広義といえばどんな主張でも通ると思ってる厨房発見。

696 名前:nobodyさん mailto:sage [2008/04/18(金) 15:39:38 ID:???]
メールフォームとかで

//入力画面
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さん mailto:sage [2008/04/18(金) 16:19:29 ID:???]
findByなどで、hasManyでくっついてきたレコード数をカウントしたい場合、
どのようにすればよいのでしょうか?

698 名前:nobodyさん mailto:sage [2008/04/18(金) 18:21:08 ID:???]
1.1系でmode内でorderとかconditionを設定できないの?

class Post extends AppModel {

protected $order = "Post.created DESC";

とかでfindしても駄目なんです。

699 名前:698 mailto:sage [2008/04/18(金) 18:21:29 ID:???]
すいませんmodel内でです

700 名前:698 mailto:sage [2008/04/18(金) 19:03:12 ID:???]
もう少し分かりやすく言うと、モデル内でSQLの検索条件(where句)に縛りを入れたいです。

701 名前:nobodyさん mailto:sage [2008/04/18(金) 19:27:37 ID:???]
うっ・・・だめ。もう・・もう・・・もうでる。 モデル

702 名前:nobodyさん mailto:sage [2008/04/18(金) 19:50:15 ID:???]
モデル内に

function find_name_only($cond = "name like '%tarou%'"){
return $this->findAll($cond);
}
を書いてごまかしてみました。
ほかにいい方法があるのでしょうか?

703 名前:nobodyさん mailto:sage [2008/04/18(金) 20:00:26 ID:???]
>>696
まだ始めて2週間しかたってないけど。

form.thtml
<?php echo $html->input('Form/name'); ?>
で、どう?

あと、$this->set('data',$this->data); は、要らないとおも


704 名前:nobodyさん mailto:sage [2008/04/18(金) 20:05:29 ID:???]
>>697
count( $model['Model']['HasManyModel'] )
かな?



705 名前:697 mailto:sage [2008/04/18(金) 21:22:22 ID:???]
>>704
これは取り出した後で、PHPのcount関数で配列の要素数をカウント、ということでしょうか?

そうではなくて、
たとえばfindAllするときに取得順などにHasManyModelのカウント数を使いたいのですが。
質問の文章がわかりづらくて申し訳ありません;
よろしくお願いします。

706 名前:nobodyさん mailto:sage [2008/04/18(金) 21:42:58 ID:???]
>>705

おそらく、自分でクエリを書かないといけないでしょうね。


707 名前:697 mailto:sage [2008/04/18(金) 21:47:07 ID:???]
>>705
やはりそうですか;
せっかくフレームワークを使っているのでできればクエリは書きたくないですね・・・

UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;

708 名前:nobodyさん mailto:sage [2008/04/19(土) 01:00:18 ID:???]
> UsersをPostsの多い順に並べ替える、

やってないけど、これは、findAllの条件にexistsなんたらって書いて
countだせばいいとだろうから、一応findAllは使えるな。
半分ぐらいしか意味ないけど。

709 名前:nobodyさん mailto:sage [2008/04/19(土) 01:16:45 ID:???]
>>707

それか、1回データを取り出した後で件数をキーにした連想配列に入れかえるのはどうでしょうか。
配列の添え字を、

$array[$count .' - ' .$id]

こんな感じにして配列をソートしたら出来そうですが。


710 名前:nobodyさん mailto:sage [2008/04/19(土) 10:26:43 ID:???]
>>707
> UsersをPostsの多い順に並べ替える、など、結構よく登場すると思うのですが;

ちょうど同じような事例を考えていた。

顧客とその顧客の取引データが一対多でつながっている場合に
取引が多い顧客を見たいと。

で、いろいろ考えたんだが、顧客数や取引が多くなると重くなりそうなので、
(だって内部的には顧客ごとにデータ数えて、その数でソートするんだろう!?)
非正規化することになるが、顧客データの中に取引数フィールドを作ることにした。

あとは取引データ保存時、つまりモデルのafterSave時に、
顧客テーブルの取引数フィールドをいじればいいと。

フレームワークを使っているとこういうトリガー的なことを
データベースに依存せずにやれるから良いね。

711 名前:697 mailto:sage [2008/04/19(土) 11:37:16 ID:???]
>>ちょうど同じような事例を考えていた。

奇遇です!

なるほど・・・あえて非正規化する、と。
手元にある参考書に
「処理効率を考えて、あえて非正規化することもある」
と書いてあった意味がわかりました。

たしかに、毎回自分でクエリ書くのに比べたら、
冗長なデータを持っておくくらい、なんてことないですね!
目からウロコでした!

712 名前:nobodyさん mailto:sage [2008/04/19(土) 11:39:14 ID:???]
DB使ってる意味ねぇw

713 名前:697 mailto:sage [2008/04/19(土) 11:50:08 ID:???]
>>712
では、他に何かいいアイデアがあるのですか?

714 名前:nobodyさん mailto:sage [2008/04/19(土) 12:22:29 ID:???]
俺は自分でクエリを書いたほうが断然面白い。




715 名前:nobodyさん mailto:sage [2008/04/19(土) 12:31:41 ID:???]
1.2を入れてみたのですが、

function index() {
$data = "テスト";
$this->set('data', $data);
}

とやっただけで

Allowed memory size of xxx bytes exhausted ...

が出てしまいます;

CakePHP叩きではなく、本当に困っています。
対処法を教えてください。

716 名前:nobodyさん mailto:sage [2008/04/19(土) 12:38:01 ID:???]
>>715
その程度のコードで、そのエラーが出るときは、
基本的にバグだと思ったほうが良い。

まあ環境のせいもあるからとりあえず聞くけど、
OSとPHPのバージョンと、php.iniの設定(もしくはini_get('memory_limit'))の値)

function index() {
echo 'aaa';exit;
}
とやるとどうなるか。

index()以外のコードはどうなっているか。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef