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

PHPの名前空間

PHPでも5.3以降はJavaのパッケージのように名前空間を使うことができます。 いままではライブラリやアプリケーションの開発者は、PHPに組み込まれている関数やクラス名や他の人が作ったライブラリとの …

no image

PHPでのログ出力 PHP monolog

PHPでデバッグするときは、画面上にvar_dumpで情報を見ていたのですが、これができない場面ではログへの出力を行うことになります。 いままではフレームワークに標準でついてたんですが、これを機に一般 …

no image

Laravelでのテスト

Laravelを使ってUnitTestをする場合の注意点など。 Contents1 事前準備2 テストデータ作成機能3 実際のテストコード 事前準備 まずはアプリのディレクトリにあるphpunit.x …

no image

CakePHP3 Csvプラグイン

cakePHPでのCSVダウンロードプラグインを実装 Contents1 インストール2 プログラム3 注意点4 参考 インストール composer.jsonに下記のように書いてcomposer u …

no image

PDFテンプレートの活用

PDFのテンプレートの活用について。 PDFを出力するプログラムはいろいろありますが、今回はすでにあるPDFをテンプレート化できるライブラリについて。 Contents1 FPDI2 ソース3 参考リ …