エス技研

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 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

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で値を入力直後にバリデーションする方法解説
CakePHP3で値を入力直後にバリデーションする方法解説

CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。

CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法

CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。

CakePHP 2.3でOn Duplicate Key構文を実装

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

CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。

CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ

CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。

CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法

CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。

CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説

CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。

CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。