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

Laravelのルーティングに関して

Laravelでのルーティングに関して。 惰性で使っていたんですが、これを機にしっかりと整理してみようかと。あくまで頻出パターンのみです。 ディフォルトだとroutes/web.phpが読み込まれます …

no image

heroku+cakePHPによるメール送信

herokuに作ったアプリでメール送信機能を実装したのでその時のメモを。 まずメール送信自体はmb_send_mailなどではなく、SendGridというアプリを使います。 使い方ですが、heroku …

no image

cakePHPでの多対多について

cakePHPで多対多のリレーションを使う機会があったので、その時のメモなどを。 多対多を説明するときには例によってブログの投稿(Item)とタグ(Tag)の関係が一番わかりやすいですね。 Conte …

no image

inotifyによる検知

以前、pynotifyというpythonの検知プログラムを書きましたが、元々はinotifyというLinux上のパッケージのライブラリが元になっています。 以前調べたリンク 監視検知処理に関して 実務 …

no image

emptyの扱いに関して

PHPで空白や存在確認として便利なemptyですが、乱用すると意図しない動きをすることがあるケースが多々あります。 Contents1 emptyの挙動に関して2 数値の03 検索などの全判定と値のな …

アーカイブ