skillup

技術ブログ

PHP

cakeでのJOINについて&session

投稿日:2016年3月10日 更新日:

cakeでのJOIN

cakePHPでは基本、hasManyなどの修飾子を使えば、リレーションをとることができますが、検索においてはこれだけで解決しないこともあります。

例えばブログの投稿情報(Post)とコメント(Comment)という関係があるとします。

単純化するためにPostはidのみ、Commentはidとpost_idのみだとします。

言うまでもなくPost(1)-Comment(N)です。

この場合cakePHPでPostに$hasMany=>Commentと書いてあげれば、Postデータを取得するときに、自動的にcommentも取れます。

ただ気を付けてほしいのはJOINではないということです。

SQLのログをみればわかりますが、

  1. 最初のPostだけを取得
  2. 次にwhere post_id in ( 実際のPOSTのIDの配列 )でCommentを取得

となります。

なぜなら単純にJOINした場合、Post1行に対し、Commentのレコード分の行数になってしまうからです。

以下のエントリーでこの種の問題を扱いました。

http://skill-up-engineering.com/?p=1275

それでは上記のケースでJOINしてもいい場合はどうすればいいかというとCakeにそもそもJOINをさせる命令があります。

ほとんどSQLに近くなっていますが、下記のようになります。

上記のようにしてあげればJOINをとることができます。

参考リンク

http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html

cakeでのsessionについて

JOINとは関係ないネタになってしまいますが、sessionの有効時間を変更したいときです。

下記のリンクであるようにbootstrap.phpに設定を書いてあげればOKです。

-PHP
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

CakePHP2系でのテスト処理

cakePHP2系でのテストの処理について。 PHPでのテストといえばphpunitが有名かと思います。cakePHPでも標準でphpunitがはいっており、ユニットテストを行うことができます。 Co …

no image

cakePHPでのバッチスクリプト

cakeでバッチのプログラムを書く機会があったのでメモします。 まあ、バッチだったらcakeでなくてもいいのですが、やはりcakeのModelをいろいろと使えると便利ですので・・ まずファイルパスです …

no image

Traitによるコードの再利用

PHPでは多重継承が禁じられて(親は1つしかもてない)いるため、共通性のあるコードを書こうと思った時に親にかいていない場合限界があります。 そんな時に使えるのがTraitという考え方で、これを使います …

no image

アプリケーションアーキテクチャについて 〜既存のMVCに関して〜

今回はアプリケーションのルーター以降のアーキテクチャに関して。主にMVCなどについて説明したいと思います。 Contents1 MVC(Model,Controller,View)1.1 トランザクシ …

no image

携帯サイト取得手法

PHPでスクレイピングの仕事をよくやるんですが、携帯サイトを取得してほしいという要望があり、少し調査をすることに。 携帯サイトといってもドメイン以下のディレクトリで/で区切ってsample.domai …