CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
2014/06/26
連携先のテーブルの項目で条件抽出する場合
連携先のテーブルの項目で条件抽出するサンプルコード
「CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合」でテーブルの連携の仕組みについて書きましたが、連携先のテーブルの項目をキーとして条件を抽出したい場合の記述方法です。
上記のページで説明した内容は、複数のテーブルの連携(テーブルのアソシエーション)を行って、複数のテーブルをまたいでデータを取得する方法を記述しました。
だいたいの場合においては、自分のテーブル内にある項目を条件抽出のキーとして条件抽出をすると思いますが、場合によっては連携先のテーブルにある項目を条件抽出のキーとして条件抽出したい場合も出てくるでしょう。
そんな場合の記述方法です。
結構悩んでいろいろと妙な試行錯誤を行いましたが、分かってしまえば記述方法は簡単です。そして「そりゃそうだな」と思える記述方法です。
テーブルや、Model、Viewなどは上記の説明ページを参考にしてください。
変更する点は Controllerです。
例えば、通常「details.sec_code = “1234”」の値を取得する場合は、「conditions句」を使って下記の様に記述します。
—————–/Controllers/DetailsController.php
1 2 3 4 5 6 7 8 9 10 |
<?php class DetailsController extends AppController { function index() { $datas = $this->Detail->find('all', array ( 'conditions' => array ( 'Detail.sec_code' => '1234' ) ) ); $this->set('datas', $datas); } } ?> |
—————–
そして、連携先のテーブルの項目で抽出したい場合は、5行目の「Detail2.sec_code」を連携先の情報にするだけです。
連携先のテーブル名は、Modelで連携の名前として記述したものを記述し、項目名はそのまま項目名を記述します。
下記の例は、いずれのテーブルも「sec_code」という項目がありますのでわかりにくいですが、「Detail2.name」などと条件を設定しても検索されます。
—————–/Controllers/DetailsController.php
1 2 3 4 5 6 7 8 9 10 |
<?php class DetailsController extends AppController { function index() { $datas = $this->Detail->find('all', array ( 'conditions' => array ( 'Detail2.sec_code' => '1234' ) ) ); $this->set('datas', $datas); } } ?> |
—————–
また、「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以外のカラムでアソシエーション(連携)をさせる場合
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!
-
-
CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3でデータベースに値を保存する前にバリデーションを行い、その結果によって処理を振り分ける方法について解説。「$topic->errors()」と「$topic->hasErrors()」の2つの方法がある。
-
-
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。
-
-
CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得
URLやドメイン、フォルダへのパスの取得は、ビューではUrlHelperを使い、コントローラーではRouterクラスを使います。第2引数の指定でURLを取得することも可能。
-
-
CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座
CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。
-
-
CakePHP3でQRコードを作成、表示するライブラリ「cakePHP-QR-Code-Helper」
CakePHPでQRコードを生成するライブラリ「cakePHP-QR-Code-Helper」の紹介。GDライブラリのインストールも必要ないHelperとして提供されているため、ファイルを設置すればすぐに使用可能。
-
-
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。
-
-
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3でパンくずの指定方法の解説。2つのヘルパーがあるが簡単なHTMLヘルパーを使った方法を、実際の状況に合わせて3つのパターン(エレメント化、ブロック化)にして解説。
-
-
CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。
-
-
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、CakePHP5でクリエビルダーを利用してテーブルからレコードを取得する際、asを使用してカラムの別名で値を取得したい場合の対応方法を解説。また、別名にはハイフンやアスタリスクなど使用できない文字がある点も解説。