« 404エラーページをカスタマイズする方法PostgreSQLの持続的接続を解除する方法 »

好きな時に好きなキーでアソシエーションする方法

好きな時に好きなキーでアソシエーションする方法

パーマリンク 2008/06/15 18:42:59 著者: cakephp メール
カテゴリ: モデル

通常のアソシエーションのやり方だと、必要ない時に外すという処理が必要になってきます。
そのテーブル単体のデータが欲しい頻度とアソシエーションしたデータが欲しい頻度の比率にもよると思いますが、単体のデータを取得する方が多い場合は、こちらのやり方が良いのではないでしょうか。

また、通常のアソシエーションの場合、結合させるキーは決まっています。
任意のキーで結合したい場合はなかなかうまくいきません。
そんな時も今回の方法だとうまくいきます。

1.アソシエーションの準備

まずはアソシエーションの準備として、app/app_model.php に下記の内容を追加します。

<?php
class AppModel extends Model
{
    // アソシエーションの設定
    public function expects($array)
    {
        foreach ($array as $assoc) {
            $this->bindModel( 
                array($this->assocs[$assoc]['type'] => 
                    array($assoc => $this->assocs[$assoc]))
            ); 
        } 
    }
}

2.各モデルの設定

どのモデルとどの形式でアソシエーションさせるかを設定します。

<?php
class Sample extends AppModel
{
    // アソシエーション設定
    public $assocs = array(
        // 商品マスタ
        'Item' => array(
            'type' => 'hasAndBelongsToMany',
            'className' => 'Item',
            'joinTable' => 'samples_items',
            'foreignKey' => 'sample_id',
            'associationForeignKey' => 'item_id',
        ),
    );

type の部分に他のアソシエーションの形式(hasOne など)も設定できます。

3.コントローラーから呼び出す

そのままアソシエーションさせる場合は、下記のようにすることで呼び出すことが出来ます。

$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();


キーを変更する場合

$this->Sample->primaryKey = 'item_id'; // キーの変更

$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();

$this->Sample->primaryKey = 'id'; // キーを元に戻す


Item テーブルに対して条件を指定したい場合

$this->Sample->assocs['Item']['conditions'] = array('name' => 'hoge');
$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();

統一で使える条件はモデルに直接記載し、可変の条件はコントローラで指定すれば良いですね。

参考:使用するアソシエーションをコントローラで決める[CakePHP]

この記事へのトラックバック アドレス

トラックバックURL(右クリックでURLのコピーをしてください)

フィードバックはまだありません...

コメントを残す


頂いたメールアドレスはこのサイト上には表示されません

頂いたURLは表示されます。
(改行が自動で <br /> になります)
(Name, email & website)
(ユーザに、メッセージ・フォームを通じた連絡を許可します (あなたのメール・アドレスは表示されません))
2018年9月
 << <   > >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

CakePHPに関する情報をまとめていきます。

開発スピードがアップできればうれしいです。

>>連絡はこちらへどうぞ



CakePHP最新版
CakePHP 1.2.3.8166


CakePHPの書籍

CakePHPによる実践Webアプリケーション開発

CakePHP1.2で作成する人にオススメ。
とても参考になります。

まるごとPHP!(vol.2)

安藤さんの解説が載っています。
AmazonのPagination部分は参考になります。

CakePHPによるWebアプリケーション開発

まだ読んだことありません

CakePHPポケットリファレンス
CakePHPポケットリファレンス
CakePHP1.2 でやるなら、これがあると何かと便利♪

CakePHP徹底入門
CakePHP徹底入門
CakePHP1.2 を今から始めるならここから

Fast CakePHP
Fast CakePHP
シンプルでわかりやすい CakePHP の入門書

CakePHPガイドブック
CakePHPガイドブック
CakePHP1.1 ではとても参考にした CakePHP 最初の入門書

検索

XMLフィード

16ブログ     powered by b2evolution