エス技研

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


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」を設定します。
 
具体的なリンクの記述は以下のようになります。
———————-

———————-
 
そして、受ける側の処理は、下記の様になります。
 
———————-

———————-
 
ですが、Modelで「$primaryKey = ‘sec_code’」を指定しているため、引数として IDの情報を渡しても何も表示されません。
(この場合だと「id」と「sec_code」が同じレコードは表示されますが。)
 
なぜなら、Modelで「$primaryKey = ‘sec_code’」と指定しているため、すべての処理の PrimaryKeyが「sec_code」になってしまっているからです。
 
そのため、リンクの設定の部分で下記の様に「id」の部分を「sec_code」に変えることで正しくリンクがされるようになります。
———————-

———————-
 
 
 
私はこのことには比較的早く気付いたものの、これまで使っていた処理をそのまま使って、エラーが表示されるでもなく、値が取得できないというのは結構焦りますね。
悩む原因の一つになるでしょう。
 
同じように悩む方の悩みが早く解消されることを祈りつつ...
 
 
 
【Cakephp 2.3・baserCMS テーブルの連携(アソシエーション)関連記事】
baserCMSでオリジナルのデータベースから情報を取得する場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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

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

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

  関連記事

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

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

CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを
CakePHP3のルーティング(routes.php)の変更が反映されない時はキャッシュのクリアを

CakePHP3でルーティングの設定変更をしたけど反映されない!そんなときは慌てず騒がずキャッシュをクリアしよう!ルーティングの設定もキャッシュされることがあるらしい。

CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能

CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。

CakePHP3のインストールでURL rewriting......のエラーが!その解決方法解説
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説

CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。

CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法

CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。

CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説

WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。

CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQLの実行はConnectionManagerを使う

CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。

CakePHP 2.3 Search Pluginで検索処理 その1設置方法

CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。

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

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

CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法

CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。