エス技研

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.

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

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

  関連記事

CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要

CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。

CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説

responseの値を指定する方法は3系では「body」だが、4系では「withStringBody」になりる。加えてJSON形式なら「withType」で指定するなど4系では結構異なる処理がある。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll

主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。

CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。

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

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

CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法

CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。

CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方

CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。

CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点

CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。

CakePHP 2.3 ログイン、操作履歴、アクセスログ出力

CakePHPでログインや操作履歴などのアクセスログ出力処理を作成します。