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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
ID以外のカラムでアソシエーション(連携)させて詳細ページを表示させる際の考え方と注意点をサンプルソースを用いて解説しています。
-
-
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。
-
-
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!
-
-
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。
-
-
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。
-
-
CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
-
CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方
CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。
-
-
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。
-
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。