codecheck.inのIRCにも来てくれて衝撃が走りました。
cakephp.vimはこれから進化していく予感です。
もちろん僕もお手伝いする予定。
ただ、英語力の無さを痛感しまくったので、これからマジで勉強しようと思います。
通訳してくれたみんな++
2008年8月22日金曜日
2008年6月6日金曜日
CakePHPのMVC間を動き回れるcakephp.vimを作ってみた
CakePHPのMVC間を動き回れるcakephp.vimを作ってみた。
http://trac.codecheck.in/share/browser/dotfiles/vim/cohtan/.vim/plugin/cakephp.vim
設計とかくそです。とりあえず、:help usr_41みながらまずは動くものをとこさえてみました。
appの中でvim . とかしないといけないくらいしょぼい(カレントディレクトリがapp内限定)ですが、
とか、そんな感じです。
一人でコツコツCake使って書いているとMVC間をむっちゃ横断するので、少しでも手軽に横断出来ないものか。
と常々思っていました。
rails.vimにはまだまだ到底及びませんが、MVC間の移動が楽になっただけでも便利っぽいです。
ちなみにこれのEmacsバージョンをk1LoW氏が作っています。
http://trac.codecheck.in/share/browser/dotfiles/vim/cohtan/.vim/plugin/cakephp.vim
設計とかくそです。とりあえず、:help usr_41みながらまずは動くものをとこさえてみました。
appの中でvim . とかしないといけないくらいしょぼい(カレントディレクトリがapp内限定)ですが、
- :CakecontrollerでModelやViewから該当のControllerへ移動。Viewからの場合は該当functionの先頭行へ飛ぶ
- :CakemodelでControllerやViewから該当Modelへ移動
- :CakeviewでControllerから該当Viewへ移動
とか、そんな感じです。
一人でコツコツCake使って書いているとMVC間をむっちゃ横断するので、少しでも手軽に横断出来ないものか。
と常々思っていました。
rails.vimにはまだまだ到底及びませんが、MVC間の移動が楽になっただけでも便利っぽいです。
ちなみにこれのEmacsバージョンをk1LoW氏が作っています。
2008年3月2日日曜日
Cakephp1.2 特定のモデルのPaginate SQLをカスタマイズする
CakePHP1.2になって超絶便利になったController::paginate。
こんな一行で勝手に10データ分ずつページネーションやってくれる優れもの。
大変便利な機能なんですけど、一つ欠点があります。
例えば、
こんな「logs」なんつーテーブルがあったとします。
ここで、user_idごとにlogin回数を集計したいとなった場合、GROUP BY 句を使う必要があります。
そのときにController::paginateメソッドではうまくページネーションすることができなくなってしまうというわけです。
うーむ、ここばっかりは自前でページネーション作るしかないかぁ。がっくし、と少し肩を落としながら該当部分のソースをごろごろ眺めていると、
cake/libs/controller/controller.php : LINE 957
となってました。
どうやらモデル内にpaginateCountというメソッドを用意してあげて、そいつが適切なカウント数を返してあげればGROUP BY句が入っていようが、きちんとページネーションしてくれるというわけでした!
モデル名はLogということにして試しに書いてみるとこんな感じ。
app/model/log.php
今回の検証ではconditionsは配列になっていて、[1]にController::paginateに渡したWHERE句が入っていました。
この辺はもうちょっと調べなきゃです。
と、このメソッドをモデルに突っ込んでおくだけで集計後の値でカウントしたいようなテーブルにおいてもpaginateが使用できます。なかなか素敵ですね。
ただ、
がなんかかっこわるいですw
とかいけそうな気がしたけど駄目でしたorz
あれー、こういう書き方ってダメなんだっけ。。
$this->paginate = array('limit' => 10, 'page' => 1);
$this->paginate(MODEL_NAME, Mixed);こんな一行で勝手に10データ分ずつページネーションやってくれる優れもの。
大変便利な機能なんですけど、一つ欠点があります。
例えば、
| ID | user_id | login_date |
|---|---|---|
| 1 | 1 | 2008-02-29 |
| 2 | 1 | 2008-03-01 |
| 3 | 2 | 2008-02-29 |
| 4 | 3 | 2008-02-29 |
こんな「logs」なんつーテーブルがあったとします。
ここで、user_idごとにlogin回数を集計したいとなった場合、GROUP BY 句を使う必要があります。
そのときにController::paginateメソッドではうまくページネーションすることができなくなってしまうというわけです。
うーむ、ここばっかりは自前でページネーション作るしかないかぁ。がっくし、と少し肩を落としながら該当部分のソースをごろごろ眺めていると、
cake/libs/controller/controller.php : LINE 957
if (method_exists($object, 'paginateCount')) {
$count = $object->paginateCount($conditions, $recursive);
} else {
$count = $object->findCount($conditions, $recursive);
}
$pageCount = intval(ceil($count / $limit));となってました。
どうやらモデル内にpaginateCountというメソッドを用意してあげて、そいつが適切なカウント数を返してあげればGROUP BY句が入っていようが、きちんとページネーションしてくれるというわけでした!
モデル名はLogということにして試しに書いてみるとこんな感じ。
app/model/log.php
class LogModel extends AppModel {
var $name = "Log";
function paginateCount($conditions, $recursive) {
$result = $this->query('SELECT Log.user_id FROM logs as Log WHERE ' . $conditions[1]);
return count($result);
}
}今回の検証ではconditionsは配列になっていて、[1]にController::paginateに渡したWHERE句が入っていました。
この辺はもうちょっと調べなきゃです。
と、このメソッドをモデルに突っ込んでおくだけで集計後の値でカウントしたいようなテーブルにおいてもpaginateが使用できます。なかなか素敵ですね。
ただ、
return count($result);
がなんかかっこわるいですw
SELECT COUNT ( SELECT Log.user_id FROM logs as Log WHERE HOGE GROUP BY Log.user_id );
とかいけそうな気がしたけど駄目でしたorz
あれー、こういう書き方ってダメなんだっけ。。
2008年2月13日水曜日
CakePHP 1.1.19.6305ではアンダースコアのついたテーブルのScaffoldingがおかしい
Can't scaffold a table named line_items in cake_1.1.19.6305
これで2時間くらい無駄にした気がする。
I had the same problem for baking
I check the problem, it seems like cakePHP doesn't like underscored
table name anymore
これで2時間くらい無駄にした気がする。
登録:
投稿 (Atom)
久しぶりにブログを書く
最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...
-
タイトルのようなことをちょっとやったのでメモ。 Postfixでアドレスを書き換える為にはカノニカルアドレスマッピングという機能を使用。 参考 : Postfixアドレス書き換え 設定例をいくつかメモります。 おまじない的にやること Postfix 2.2系の場合 特に無し。 書...
-
今年の3月に契約して5月末納車以降、大活躍な愛車の CX-5 XD(クリーンディーゼルモデル)。 もうね、このクルマめちゃめちゃいいですよ。ちょっと幅がでかいってのはありますが(全幅1840mm)走りがとてもいい。強力なトルクでしかもフラット。ハンドリングも大満足。...
-
最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...