Model

CakePHPアプリケーションの基本的な設計指針 (3) - カスタムfindタイプ -

イントロダクション 標準のfindの種類(first, all, count, threaded, neighbor, list)だけでは、ビジネスロジックに対応できないことがあります。 これに対するひとつのプラクティスとしては、カスタムfindタイプを定義することです。 この記事では、実際…

誰でもできるサービスレイヤの実装

イントロダクション CakePHPでは標準でサービスレイヤを提供していません。 しかし、CakePHPはフレームワークとしてその基礎部分は十分に提供してると言えます。これはアプリケーション側で実装すべきでしょう。 規模が一定を超えるアプリケーションではサー…

Re: 中間テーブルのcreated、modifiedについて

イントロダクション CakePHPのhasAndBelongsToMany(以下habtmと呼ぶ)機構は、期待する振る舞いをしないことがあります。 CakePHPはそのマニュアルで、habtmが複雑になったときについてこう言及しています: http://book.cakephp.org/ja/view/1034/Saving-R…

バリデーションのベストプラクティス

イントロダクション CakePHPの使い方は多種多様で、もちろん一つのやり方が正解ということはありません。 しかし、CakePHPはフレームワークであるわけで、想定された使い方以外ではその真価をなかなか発揮できません。 CakePHPにおけるモデルは、ビジネスロ…

paginateオプションをモデルに移行する(改善・修正版)

過去記事の問題点 Paginateオプションをモデルに移行する - 24時間CakePHP http://d.hatena.ne.jp/hiromi2424/20100426/1272289702 では、paginateオプション内に"order"や"limit"が無いため、これらオプションを指定すると動作が謎になってしまいました。 …

Paginateオプションをモデルに移行する

注意 改善記事を書きました。この記事の例ではうまく動きません。 paginateオプションをモデルに移行する(改善・修正版) - 24時間CakePHP http://d.hatena.ne.jp/hiromi2424/20100609/1276076490 概要 Paginatorを使うとき、group byして集計関数を使った…

SessionBehavior

1:07更新

saveAll()でexists()が各レコードごとに3回呼ばれる

1.3からなのか不明。 Model::cacheQueries = true(デフォルトではfalse)とすれば各1回で済む。 ただしsave()またはsaveAll()した後read()とかexists()とかするとバグる可能性があるので、慎重にどうぞ。

HABTMの古いリンクが全て削除されてしまう問題の修正

チケット投げました http://cakephp.lighthouseapp.com/projects/42648-cakephp-1x/tickets/275-old-habtm-links-should-not-be-deleted-when-new-habtm-links-contain-these#ticket-275-3VirtualFieldsのテストをするとか言っておきながら、Model::__saveMu…