エス技研

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


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

      2017/04/29

ID以外のカラムでアソシエーションをさせる場合

 

baserCMSと CakePHPで動作に差異がある

 
baserCMSは、CakePHPの上で動いていますので、基本的に CakePHPの仕様に従ってプログラムを作っていけばいいのですが、ID以外のカラムでアソシエーション(テーブルの連携)をさせる処理で、CakePHPと違う処理がありましたので書いておきます。
 
 
CakePHPにおいて、テーブルの連携については「CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合」に記事を書きましたので参考にしてください。
 
 
では、何が違うのか!
  baserCMSは $hasOne しか使えない
ということです。
 
 

baserCMSは hasOneしか使えない

 
プラグインでオリジナルのテーブルから情報を取得する処理を作成していたのですが、その際、テーブル連携に ID以外のカラム同士の連携をさせたい場面がありました。
ですが、CakePHPの仕様の通りに連携させようとしていましたが、なかなかうまくいかず、あれこれと試した結果、baserCMSは $hasOne しか使えないということにたどり着きました。
 
もしかすると、baserCMS全体ではなく、baserCMSのプラグインの仕様なのかもしれませんが、少なくともプラグインとして作った場合は、$hasOneでの連携しか動きませんでした。
 
具体的な記述の方法は、上記に書いた CakePHPのテーブル連携で書いた処理を参考にしてください。
 
また、プラグインを作るのに参考にしたサイトは、以下になります。
http://blog.komomo.biz/log/archives/1
http://blog.komomo.biz/log/archives/3
 
また、下記のページにも記事を書いています。
baserCMSでオリジナルのデータベースから情報を取得する場合
 
 
プラグインからの設置になってしまいますが、上記のサイトを参考にしながら設置をしてみてください。
基本的には「http://blog.komomo.biz/log/archives/1」のサイトを参考にしながら、CakePHPでテーブル連携した処理と同じ処理を書いたものになります。
 
CakePHPでも同じように作ってもらえると分かるのですが、CakePHPでは表示される「$belongsTo」で取得する「Detail2」が表示されないのです。
「Detail3」は、$hasOne で処理しますので取得できます。
 
 
もともとは、こちらの baserCMSの中でテーブルの連携の実験をやっていましたので、正解にたどり着くまでかなりの試行錯誤をする結果となってしまいましたが、それをそのまま baserCMSを挟まない CakePHPの環境に持って行ったところどちらでも動いたことで、baserCMS特有の問題なのだと判明しました。
 
 
※この方法で「$primaryKey = ‘sec_code’」を指定すると、個別の詳細ページを表示させる際のキーになるカラムが「sec_code」になりますので注意が必要です。
 詳しくは「CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点」を参照ください。
 
 

baserCMSでのサンプルコード

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

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

—————–
 
—————–/app/plugins/bcforum/models/bcforum_post.php

—————–
 
—————–/app/plugins/bcforum/models/bcforum_detail.php

—————–
 
—————–/app/plugins/bcforum/controllers/bcforum_details_controller.php

—————–
 
—————–/app/plugins/bcforum/views/bcforum_details/index.php

—————–
  ※一部全角「<」を使用しています。
 
 
 
【Cakephp 2.3・baserCMS テーブルの連携(アソシエーション)関連記事】
baserCMSでオリジナルのデータベースから情報を取得する場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合
CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合

 - baserCMS

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

baserCMS 3系でテーマが変更されないのはキャッシュが原因

baserCMS 3系ではキャッシュの処理が原因でテーマを変更したけども変更されないという不具合があります。

ロリポップで baserCMSを利用する際の Basic認証の設置には注意しましょう

ロリポップではBasic認証を設置する際に.htaccessを書き換えますがbaserCMSで利用する処理も上書きされます。その対処方法の解説です。

baserCMSで開発環境と公開環境でドメイン、フォルダが変わる場合の不具合

baserCMSで開発環境と公開環境でドメインが変わる場合は URLに絡む設定を変更する必要がありますのでその解説です。

baserCMSでサイトの構築をしてみることにしました

baserCMSでサイトの構築をしてみることにしました。baserCMSを選んだ理由とそれを XAMPP環境に設置する方法などを説明しています。

baserCMSをほかのサーバ、環境にコピーする場合

baserCMSを他のサーバ、環境にコピーする場合の設定方法について説明します。

baserCMSは 3種類のデバッグモードが用意されています

デバッグモードは3種類あります。デバッグモードにすることでキャッシュされなくなりますので、開発の際には必須の設定です。

baserCMSのメルマガで当サイトが紹介されていたようです

baserCMSのメルマガで当サイトが紹介されていたようです。非常にありがたく、嬉しく思っており、今後も baserCMSが少しでも広がっていくお手伝いをさせていただければ、と思っています。

baserCMSでオリジナルのデータベースから情報を取得する場合

オリジナルで作ったテーブルから情報を取得し利用する場合はプラグインとして機能を拡張することで対応出来ます。その方法について説明しています。

baserCMS お問い合わせフォームのボタンを画像に変えたい場合(ボタンのテキストを変えたい!っていう場合も)

お問い合わせフォームのボタンを画像に変えたい場合、ボタンのテキストを変えたい場合、それにまつわる関連の解説をしています。

baserCMSでwp_is_mobileと同じスマホ振り分け関数を実装

baserCMS版 wp_is_mobile関数です。Google Adsenseの規約対応のためにも必要な関数です。