CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
2014/06/26
ID以外のカラムでアソシエーション
アソシエーションさせる際の注意点
CakePHPにおいて、Modelで「$primaryKey」を指定すると、個別の詳細ページを表示させる際のキーになるカラムが「$primaryKey」で指定したになりますので注意が必要、という記事になります。
また、下記の ID以外のカラムでテーブルのアソシエーション(テーブルの連携)をさせる場合の説明を下記のページで行いましたが、今回の記事は、下記の記事の続きとして書いています。
CakePHPの場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
baserCMSの場合
baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合
※baserCMSは、CakePHP上で動いている CMSですので、基本的には CakePHPの仕様に則って動いているのですが、テーブルの連携の部分は若干処理が違うようでした。そのため、別々に記事を書いていますが、今回の処理はどちらでも同じ結果でしたので、記事を分けていません。
また、ソース自体は、CakePHPのものとして書いています。
アソシエーションさせるためのサンプルコード
通常、一覧ページには詳細ページへのリンクがあり、詳細ページへのリンクは「ID」を設定します。
具体的なリンクの記述は以下のようになります。
———————-
|
1 2 3 |
foreach ( $datas as $data ): echo ($this->html->link('詳細', array('controller' => 'details', 'action' => 'view', $data['Detail']['id']))); endforeach; |
———————-
そして、受ける側の処理は、下記の様になります。
———————-
|
1 2 3 4 5 6 |
function view($id) { if ($id) { $data = $this->Detail->read(null, $id); $this->set('data', $data); } } |
———————-
ですが、Modelで「$primaryKey = ‘sec_code’」を指定しているため、引数として IDの情報を渡しても何も表示されません。
(この場合だと「id」と「sec_code」が同じレコードは表示されますが。)
なぜなら、Modelで「$primaryKey = ‘sec_code’」と指定しているため、すべての処理の PrimaryKeyが「sec_code」になってしまっているからです。
そのため、リンクの設定の部分で下記の様に「id」の部分を「sec_code」に変えることで正しくリンクがされるようになります。
———————-
|
1 |
echo ($this->html->link('詳細', array('controller' => 'details', 'action' => 'view', $data['Detail']['sec_code']))); |
———————-
私はこのことには比較的早く気付いたものの、これまで使っていた処理をそのまま使って、エラーが表示されるでもなく、値が取得できないというのは結構焦りますね。
悩む原因の一つになるでしょう。
同じように悩む方の悩みが早く解消されることを祈りつつ...
【Cakephp 2.3・baserCMS テーブルの連携(アソシエーション)関連記事】
baserCMSでオリジナルのデータベースから情報を取得する場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。
-
-
CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。Usersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。
-
-
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!
-
-
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。
-
-
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。
-
-
CakePHPで同一テーブル内の値を比較する条件でレコードを取得する方法
CakePHPの同一テーブルにある項目の値を比較し条件に合致するレコードを取得する方法を解説。[”項目名”=>”値”]ではなく[”項目名 = 項目名”]と書くところがポイント。
-
-
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。
-
-
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。
-
-
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。