エス技研

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


CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合

      2017/03/11

ID以外のカラムでアソシエーション

 

アソシエーションさせるサンプルコード

 
CakePHPで ID以外のカラム同士でテーブルをアソシエーション(連携)させたい場合の方法について書いておきます。
 
 
そもそもは baserCMSでプラグインを作っているとき、いずれの項目もユニークではありつつ、IDにはしたくない項目同士を連携させたい、と思ったことがきっかけでした。
ただ、baserCMSのテーブル連携は、CakePHPとは少し仕様が違うようですので、baserCMSで悩んでいる方は、「baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合」 を参照してください。
(baserCMSは、CakePHPをベースに作られている CMSですので、本来はプラグインを作る際も CakePHPのルールに則って作っていきます。)
 
 
下記の「details.post_id」と「posts.id」の項目を連携させることは、CakePHPのルールに命名規約に則っていますので、「$hasOne」でも「$belongsTo」でもどちらでも簡単に連携させることができます。
 
ですが、「details.sec_code」と「posts.sec_code」を連携させたい場合にはどうすればいいの?という場合の対応が今回の主題です。
 
 
まず、下記 2つのテーブルを生成します。
データは、適当に登録してください。その際、それぞれのテーブルの「sec_code」の項目で連携をさせますので、いくつかのレコードは連携できるよう同じ情報を編集してください。
 
—————–テーブル「posts」

—————–
 
—————–テーブル「details」

—————–
 
続いて、Modelの設定です。
今回の件においては、この Modelの設定が一番大事な処理になります。
 
「$primaryKey」は、「/model/Detail.php」「/model/Post.php」の両方に書いてありますが、「Detail2」の「$belongsTo」で連携させる場合は、連携先の「/model/Post.php」の方に記述します。
「$hasOne」で連携させる場合は、自身の「/model/Detail.php」の中に記述をします。
 
その動きを確認するために、どちらかの「$primaryKey」の行を消してみると、消した方の変数が表示されなくなりますので、動きの内容が理解できるでしょう。
 
—————–(/Model/Detail.php)

—————–
 
—————–(/model/Post.php)

—————–
 
続いて、Controllerです。
こちらは、単にテーブルの値を表示させる処理とするため、簡単に記述しています。
 
—————–/Controllers/DetailsController.php

—————–
 
最後に View。
こちらも受け取った値を表示させるだけですので、「print_r」コマンドで簡単に表示しています。
 
—————–/Views/Details/index.ctp

—————–
 ※一部全角「<」を使用しています。
 
 


 

参考サイト

 
また、今回の記事を書くのに参考にしたのは下記のサイトですが、下記のサイトには Model内に記述する方法の他に、Controllerで記述する方法も書かれています。
http://labo.tsuchinokopro.com/2010/02/287/
 
※この方法で「$primaryKey = ‘sec_code’」を指定すると、個別の詳細ページを表示させる際のキーになるカラムが「sec_code」になりますので注意が必要です。
 詳しくは CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点 を参照ください。
 
 
 
【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 5.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

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

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

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

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

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

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

CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説

CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。

CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法

アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。

URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開

URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。

CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法

CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。

CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説

CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。

CakePHP 2.3でOn Duplicate Key構文を実装

CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。

CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法
CakePHP3の検索プラグイン「friendsofcake/search」の様々な検索の仕方の実装方法

CakePHP3で検索をするプラグイン「friendsofcake/search」の検索条件のカスタマイズ方法の解説。検索項目を増やしたり、以上、以下での検索や、チェックボックスによる検索の方法などを解説。