[表示 : 全て 最新50 1-99 101- 2chのread.cgiへ]
Update time : 09/24 18:53 / Filesize : 35 KB / Number-of Response : 144
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

【PHP】フレームワーク CakePHP 2ホール目



1 名前:nobodyさん mailto:sage [2007/11/14(水) 02:50:28 ID:???]
本家
www.cakephp.org/

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

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

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

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


129 名前:nobodyさん mailto:sage [2007/12/18(火) 02:17:35 ID:???]
1.2系だとHABTMも標準でsaveできるようになったんな。すごい便利

130 名前:nobodyさん mailto:sage [2007/12/18(火) 02:25:56 ID:???]
>>129

諸刃の剣の悪寒
いじりたいときは返って面倒

まあそのまま使うときはよさそうだね

131 名前:nobodyさん mailto:sage [2007/12/18(火) 11:36:32 ID:???]
モデル書くときって簡単なSQLでもfindとか使わずに
queryでSQL文が見えてた方が開発効率がよくね?

132 名前:nobodyさん mailto:sage [2007/12/18(火) 19:39:14 ID:???]
返ってくるデータが予測つかない人はそうだな

133 名前:nobodyさん mailto:sage [2007/12/19(水) 02:24:25 ID:???]
>>131
俺はすでにそれじゃだめだな。

CakePHPつかう以前からの話だが、
何かのデータを保存・・・時にほかのテーブルにも保存
なんて処理をやりたいことがある。

SQLでいえばトリガーでやるところなのだが、
トリガーはDBMSに依存してしまう。

そういうときにフレームワークで処理を割り込ませられると便利。
CakePHPでいうBehaviorの仕事だ。

134 名前:nobodyさん mailto:sage [2007/12/19(水) 02:34:00 ID:???]
それから、俺は、Behaviorを使うことで
SQL文の拡張のようなことをやっている。

たとえば・・・これは俺が実際に使っている例ではないんだが、
全文検索をするための構文はDBMSによって違う。

しかし、それがなんであれ,
$conditions = array('field' => 'FULLTEXTSEARCH ' . $keyword);
という風にFULLTEXTSEARCH キーワードを条件文に使用できる。

あとはBehaviorのbeforeFindで条件を調べて
DBMSにあわせた適切な構文に置き換えるだけ。

135 名前:nobodyさん mailto:sage [2007/12/19(水) 11:09:58 ID:???]
>>126
saveに渡す配列にフィールドのキーが存在しなければvalidationもされないし
データ更新もされないから気にしないでOK

136 名前:nobodyさん mailto:sage [2007/12/19(水) 13:28:34 ID:???]
Paginationまわりがわかりにくいと思うのは俺だけ? 特に1.2

フレームワークそのままの形だけの使い方をしている分にはいいんだけど
データ取得の命令がfindAllがpaginate関数になったりと、
理由はわからなくは無いんだけど、どうも設計に違和感を感じる。

とりあえず、1.2用のコントローラー以外(たとえばComponent)でも
使えるような汎用的なコードを書いておくよ。といっても怪しいけどな。
変なことをしているかもしれん。まあ俺が見つけた方法ということで。

しかし、コントローラ以外からコントローラのpaginate変数を設定したり
paginate関数を読んだりするのが気持ち悪い。
もっとスマートな方法ないのかな。



※$controllerはどこからか取得

$model_name = 'Post';
loadModel($model_name);
$model = new $model_name;
$conditions = array('id' => '> 3');
$controller->paginate[$model_name] = array(
  'limit'=>2,
  'page'=>1,
  'conditions'=>$conditions);
$data = $controller->paginate($model);

pr($data); //検索情報
pr($controller->params['paging'][$model_name]); //ページ情報

137 名前:nobodyさん [2007/12/19(水) 19:37:24 ID:nmvrwuDT]
recursiveが2以上のアソシエーションを動的に変更する方法がよくわからない。

例えば
blog
ってテーブルがhasManyで
post
ってテーブル持ってて、そのまたさらにhasManyで
comment
ってテーブルを持ってたとする。

普段はそれぞれは一覧で表示したいのでlimitを10くらいに設定してるんだけど、
ブログの一覧からpostとそれに紐付くcommentを全て取得する際に
$this->Blog->findAll();
でコメントだけはlimitを3にしたい。

$this->Post->hasMany['Comment']['limit'] = 3;
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
とか試したけど、もう無理。

何か間違ってる?



138 名前:nobodyさん mailto:sage [2007/12/20(木) 02:56:46 ID:???]
出来ないこともないが、
テーブル名を複数形にしない時点で
自分で調べてなさすぎ感が伝わってきて
アドバイスしたい気持ちになれない。

139 名前:1/3 [2007/12/20(木) 04:06:27 ID:XdoaO407]
調べてないつもりではないんだけど、確かに情報を小出しにしてるこちらが悪かった。
ごめんなさい。
誤解を生まないようにもう一度説明すると、
blogs テーブルはBlogモデルの中で
var $hasMany = array('Post' => array('classname' => 'Post', 'limit' => 10));

postsテーブルではPostモデルで
var $hasMany = array('Comment' => array('classname' => 'Comment', 'limit' => 10));

そいで最後に
commentテーブルがCommentモデルでそれぞれ定義されてたとして。


普通はコントローラーで最初に
var $uses = array('Blog', 'Post', 'Comment');
ってやっておいて、
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
でそれぞれ
count($blogs['Posts']);// が10件
count($blogs['Posts']['Comments']);// が10件
入るよね。

140 名前:2/3 [2007/12/20(木) 04:06:58 ID:XdoaO407]
でもblogの一覧から全てのPostとCommentを取り出すのがリs−スが勿体無いときがあったとして、
 1.Postを3件だけ取り出したい
 2.Commentを3件だけ取り出したい
とすれば、

1のPostのほうは
$this->Blog->hasMany['Post']['limit'] = 3;
なり
$this->Blog->bindModel(array('hasMany' => array('Post' => array('limit' => 3))));
なりしてやればあとは
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
で3件だけPostを取り出せるんだけど、

2に関しては
$this->Post->hasMany['Comment']['limit'] = 3;
をやっても
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
をやっても、
その後
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
これをすると
count($blogs['Posts']['Comments']);
は10件取り出されてしまうんですよ。

141 名前:3/3 [2007/12/20(木) 04:07:32 ID:XdoaO407]
自分では
$this->Blog->findAll()
でblogsテーブルの直下のhasManyは動的にアソシエーションできるんだけど、
そのさらに下のアソシエーションに関しては動的に変更できなくて悩んでるんだけど、
何か決定的に間違ってる?
普通は出来るもんなんだったら、
別のところで自分が途方も無いケアレスミスを犯しててたまたま出来てないだけだってわかるだけでも
対策考えれるからありがたいんですけど。

142 名前:nobodyさん mailto:sage [2007/12/20(木) 04:10:41 ID:???]
あああ、推敲したはずなのに…。
>>139
> そいで最後に
> commentテーブルがCommentモデルでそれぞれ定義されてたとして。



> そいで最後に
> commentsテーブルがCommentモデルでそれぞれ定義されてたとして。
       ~~

の間違いです。
重ね重ねごめんなさい。

143 名前:nobodyさん [2007/12/20(木) 13:00:08 ID:rEyzQF0b]
$this->Blog->Post->hasMany['Comment']['limit'] = 3;






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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