月別アーカイブ: 2013年4月

[CakePHP] セッションを利用する

もともと PHP には $_SESSION があるので、それを利用すればよいのだが、CakePHP は $this->Session というう形で用意されている。 セッション ? CakePHP Cookbook v2.x documentation http://book.cakephp.org/2.0/ja/core-libraries/components/sessions.html 残念ながら、$_SESSION と $this->Session と互換性はない模様。他のモジュールとのやり取りをするならば、$_SESSION を使うと良い。 ■Model Model はそのまま ■Controller sess メソッドで id を保存しておいて、index で検索結果を出すという具合。 in Controller/TestController.php   / … 続きを読む

カテゴリー: CakePHP | コメントする

[CakePHP] トランザクションを利用する

トランザクションを利用する…が、WEB系の場合は、ワンコールのトランザクションしか使えないので、複数のコール/Web APIにまたがる場合は、2フェーズコミットの方法を取る。まあ、チケット予約とかのように普通はダーティコミットの方式がパフォーマンスがよい。最後にチェックを入れて、整合性がなければ/既に予約済みだとかの場合は、エラーにしてしまう方式。社内業務の場合は、それほどパフォーマンスを必要としない or 途中の入力を破棄されるほうが痛い場合は、一時入力を保持する方式でセッションを作る。 ここはワンコールのトランザクションで。 ■Model Model/AppModel.php を書き換え コネクションが Model に付属するので、$this->useDbConfig も Model 単位になってしまうという罠があるので、多人数で使う場合には考慮が必要。ただ、大抵の場 … 続きを読む

カテゴリー: CakePHP | 2件のコメント

[CakePHP] IDを指定して行を更新する

UPDATE を使って指定行を更新する。 ■Model Model はそのまま ■Controller /Test/update?id=10 とか /Test/update/10 で更新できるようにしておく。 in Controller/TestController.php read した後に set して save する。これは、PK(ID) が入っているので read がないパターンも作れるハズ。 複数の set の場合は、array を使っても ok。 ■View View は同じ ■結果 更新した結果が表示される。 ※UPDATE のために COUNT が3回呼び出されているのがなんとも。たくさんのUPDATEをする場合には、パフォーマンスに影響を与えるので、これは調節が必要。

カテゴリー: CakePHP | コメントする

[CakePHP] IDを指定して行を削除する

DELETE を使って指定行を削除する。 ■Model Model はそのまま ■Controller /Test/delete?id=10 とか /Test/delete/10 で削除できるようにしておく。 in Controller/TestController.php delete で削除する。read は必要ないみたい…あとでチェックする。 ■View View は同じ ■結果 削除した結果が表示される。 ※DELETEする前に COUNT しているのが謎だが…後で調べる。マッチする行がない場合には、DELETE が呼び出されないみたい。

カテゴリー: CakePHP | コメントする

[CakePHP] 新しい行を挿入する

INSERT を使って新しい行を追加する。 実際には、新しいIDを作成する、新しい行を追加する、2手順になる。なので、正確に作るならば新しいIDを作りながら insert をした後に update をしないといけない(競合が発生するため)のだが、まあ、ひとまず作ってみるということで。 ■テーブル構造 ID は auto_incriment を使ってもいいのだが、ここはそのまま int で。 データ同期が発生する…ってのを考慮して、UpdateDate の列を作っておく。 ■Model 新しい ID を作るための GetNewId メソッドだけ作っておく。 そういえば、行数で苦労している人もいるみたいなのだが、$this->query をした後に RowCount すると遅くなる(無駄な行を検索する)ので、SQL の COUNT 関数を使う。 な感じにすれば OK。適宜、W … 続きを読む

カテゴリー: CakePHP | コメントする

[CakePHP] 検索IDをURLに埋め込んで検索させる

findAllById を使って、検索して取得するパターンだが、/Store?id=10 ではなくて、/Store/10 のように検索できるようにする。 ■Model find 系を使うので変更なし ■Controller /Store/10 でアクセスできるようにコントローラを作成…したいのだが、できないので、/Store/index/10 でアクセスする in Controller/StoreController.php index メソッドの引き数に $id を追加するだけ。 指定されない場合にも対応できるように、デフォルトの値を null にしておく。 /Store/10 でアクセスしようとすると、「10 という名前のメソッドがない」というエラーが出るので、/Store/index/10 でアクセスをする。この場合、/Store/select/10 のようにメソッド名を … 続きを読む

カテゴリー: CakePHP | コメントする

[CakePHP] 指定したグループを検索して表示する

findAllByAreaGroupId を使って、検索して取得するパターン ■Model find 系を使うので特に変更なし ■Controller /Store?group=10 でアクセスできるようにコントローラを作成 in Controller/StoreController.php パラメータで取得するので、$this->params[‘url’][‘group’] を使う。isset チェックを忘れずに。 PK ではないので、数百行返される可能性もあるので、limit をつけたほうがベターかも。 findAllByAreagroupid のところは、findAllByAreaGroupId のように書きたいところだが、このように書くと「area_group_id」のように展開されてしまうので「Areagroupid」のように … 続きを読む

カテゴリー: CakePHP | コメントする

[CakePHP] 指定したIDの行だけ表示する

findById とか findAllById を使って PK の id を使って取得するパターン ■Model find 系を使うので特に問題なし ■Controller /Store?id=10 でアクセスできるようにコントローラを作成 in Controller/StoreController.php パラメータの部分は、$this->params[‘url’][‘id’] のように取得できる。 ただし、?id=10 の部分が指定されていない場合は、エラーになるので、isset でチェック。 findAllById を使っているのは、配列を返したいから。findById にすると単体になるんだけど、View の foreach を変更する必要があり「面倒なので」、1件の場合も配列にするため。 ■View findAllById を … 続きを読む

カテゴリー: CakePHP | コメントする

[CakePHP] 最初のひな形を作る

Store というテーブルがあるとして、 ■Model テーブル名を複数形にしたくない(既存のテーブル名を変えたくない)ので、$useTable で指定 in Model/Store.php find 系の関数だけを使うのであれば、最初は空で ok 。 ■Controller /Store でアクセスできるようにコントローラを作成 in Controller/StoreController.php 全件検索すると1万行ぐらいあるので、最初の100行で打ち切り。find でリミットを指定できるのだけど、ここは「安全」にコーディングするために、find100 とかいうメソッドでアクセスしたほうがよいかも。 この場合は、Model/Store.php に find100 メソッドを追加する。 こうやって SQL 文を直書きする。 ■View Controller で設定 $this->se … 続きを読む

カテゴリー: CakePHP | コメントする

[CakePHP] CakePHP 再々入門

とある業務のフレームワーク選定として、 ・独自MVC ・CakePHP ・ActiveRecord を考えていたのですが、ひとまず、CakePHP で試験的に実装をしてみることに「決断」。まあ、試験的なので、業務として使えるパーツを集めるということで、 CRUD をひと通り Web API として URL からパラメータを取得 複雑なクエリ トランザクションの制御 フォーム認証関係(ACL)、セッション情報 をがつがつと試していきます。 ※ http://cakephp.jp/ の 2.3.4 を使ってチェック。 CakePHP 再入門(1) – Moonmile Solutions Blog http://www.moonmile.net/blog/archives/1711 からの一連の記事は、SELECT 関係しか調べていないので、ちょっと今回の業務ロジックには足りない& … 続きを読む

カテゴリー: CakePHP | コメントする