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

クラスメソッドとインスタンスメソッド

以前staticメソッドを定義したときに、記法がインスタンスメソッドの呼び方でも呼べてしまうことがあったので、これを機にインスタンス・クラス×変数・メソッドちょっと調べてみました。 言葉で書くよりコー …

no image

HTMLの画像化について

7月にHTMLを画像化する処理なんてものをやりました。 コード自体は複雑なことはなかったんですが、新規で覚えることがそこそこあったので、メモしておきます。 Contents1 html2canvas1 …

no image

heroku+cakePHPによるメール送信

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

no image

PHP_CodeSnifferによるコードチェック

昨日の記事でphpmdという静的解析ツールを調査したんですが、それ以外にも規約にのっとっているかどうかコーディングをチェックできるツールはあります。 PHP_CodeSniffer https://g …

no image

composerでのライブラリ登録

今回はPHPのパッケージ管理ツールであるcomposerへのライブラリ登録を。 Contents1 ライブラリの作成2 packagistへの登録3 呼び出す側3.1 composer.json3.2 …