エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合

      2014/06/26

連携先のテーブルの項目で条件抽出する場合

 

連携先のテーブルの項目で条件抽出するサンプルコード

 
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合」でテーブルの連携の仕組みについて書きましたが、連携先のテーブルの項目をキーとして条件を抽出したい場合の記述方法です。
 
上記のページで説明した内容は、複数のテーブルの連携(テーブルのアソシエーション)を行って、複数のテーブルをまたいでデータを取得する方法を記述しました。
 
だいたいの場合においては、自分のテーブル内にある項目を条件抽出のキーとして条件抽出をすると思いますが、場合によっては連携先のテーブルにある項目を条件抽出のキーとして条件抽出したい場合も出てくるでしょう。
そんな場合の記述方法です。
 
 
結構悩んでいろいろと妙な試行錯誤を行いましたが、分かってしまえば記述方法は簡単です。そして「そりゃそうだな」と思える記述方法です。
 
テーブルや、Model、Viewなどは上記の説明ページを参考にしてください。
 
 
変更する点は Controllerです。
 
例えば、通常「details.sec_code = “1234”」の値を取得する場合は、「conditions句」を使って下記の様に記述します。
 
—————–/Controllers/DetailsController.php

—————–
 
そして、連携先のテーブルの項目で抽出したい場合は、5行目の「Detail2.sec_code」を連携先の情報にするだけです。
連携先のテーブル名は、Modelで連携の名前として記述したものを記述し、項目名はそのまま項目名を記述します。
下記の例は、いずれのテーブルも「sec_code」という項目がありますのでわかりにくいですが、「Detail2.name」などと条件を設定しても検索されます。
 
—————–/Controllers/DetailsController.php

—————–
 
また、「Detail2」「Detail3」のどちらも検索できますので、「$hasOne」「$belongsTo」のいずれも対応できることが分かります。
 
 
何事も分かってしまえば簡単なのですが、今回も結構試行錯誤してしまいましたね。
(ちなみに、baserCMSのプラグインとして試行錯誤をしていましたので、うまく動いていないだけでした。この辺も CakePHPと baserCMSとで動作が違うようですね。)
 
 
 
【Cakephp 2.3・baserCMS テーブルの連携(アソシエーション)関連記事】
baserCMSでオリジナルのデータベースから情報を取得する場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3で保存前にバリデーション結果を取得する2つの方法

CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。

CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法
CakePHP3のタイムゾーンを協定世界時UTCから日本標準時間JSTにずれを変更する方法

CakePHP3の標準設定のタイムゾーンは「UTC(協定世界時)」に設定されている。これを日本標準時に変更する方法(app.php、bootstrap.phpの変更方法)の解説。

CakePHP3のバージョンを指定してインストールする詳細な手順を解説
CakePHP3、CakePHP4のバージョンを指定してインストールする詳細な手順を解説

CakePHP3のバージョンを指定してインストールする方法を詳細解説。CakePHP3のインストールはComposerを使うため設定もほぼ自動で完了。データベースの接続情報を記載すればアプリ開発のベースが整う。

CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法

CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!

CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説

CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。

CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法

CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。

CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い

CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。

CakePHP3でレコードを追加、更新(Insert、Update)する複数の方法を紹介
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介

CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。