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

6778 回閲覧 このエントリーをはてなブックマークする この記事のブックマークユーザー 永続的リンク2008/04/09 11:58:56 カテゴリ: CakePHP
スポンサード リンク
CakePHPの話


CakePHPではモデルに定義しておけば、findで関連テーブルのデータを引っ張ってきてくれます。ただそんなに必要ない時も多々あると思います。


そんな時は

$this->Model->recursive = -1;

で関連テーブルのデータを取得しないようにします。


単純な場合は特に問題はないのですが、都度必要なテーブルだけアソシエーションしたい。

例えば
Aテーブルに対して関連するテーブルが、B、C、Dの3つあるとする。
そのうちBとCだけ必要な場合、どうしよう?となります。
動的にfindするときに指定できれば、便利ですよね。

WEBぷろぐらま~ システム開発エトセトラに良い方法が紹介されていました。


findする段階でアソシエーションを決めるというものです。
bindModelを利用してアソシエーションを動的に変更します。

どんな風にするかっていうと

モデルでアソシエーションを決める

typeには(hasOne,hasMany,belongsTo,hasAndBelongsToMany)が入る。

class A extends AppModel
{
    var $name = "A"; 

    public $assocs    = array(
        'B' =>
            array(
                'type'         => 'hasOne',
                // ここから下のキーと値は、通常のアソシエーションと同じ
                'className'    => 'B',
                'condtions'    => ''
            ),
        'C' =>
            array('type'         => 'hasMany',
                 'className'    => 'C'
            ),
        'D' =>
            array('type'         => 'belongsTo',
                'className'    => 'D'
            ),
    );
}


app_model.php

[cake/app_model.php] を [app/app_model.php] にコピーする。
[app/app_model.php]に以下を追加

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

コントローラでは

$this->A->findAll();

だけだとAのモデルのデータが取得される。

findをする前にアソシエーション決めると

$this->A->expects(array('B'));
$this->A->findAll();

AとBのデータが取得できるようになる。

$this->A->expects(array('C','D'));
$this->A->findAll();

AとCとDが取得できる。

主キー以外でhasOne(プライマリーキーの変更)

コントローラで変更する。

//Aのプライマリーキーを変更する
$this->A->primaryKey = 'b_id';
//アソシエーション
$this->A->expects(array('B'));
$data = $this->A->findAll();
	
pr($data);//ここではプライマリーキーが変わっている
	
//Aのプライマリーキーを直す
$this->A->primaryKey = 'id';

関連・参考サイト


 →ツイッターのフォローはこちら
スポンサード リンク
         

関連記事

↑ページ上部へ

アクセスカウンター

今日 : 7 昨日 : 14

ブログ内容

主にウェブ関係のことを書いてます。たまにブレイクダンスとか他のことも書いています。

プロフィール

MICK

MICKです。

1983年1月24日生まれ。ウェブの世界にいるのは、偶然のようで必然なのかも。

好きなこと :
 挑戦すること。物事に没頭すること。勉強すること。
嫌いなこと :
 自慢話を聞くこと。人の悪口を言うこと。

運営サイト

      

カテゴリ一覧

サイト広告

オススメの書籍とか

感想

紹介

色々

最近のコメント

最新記事

注目記事

人気記事

最近の人気記事

人気の記事

関連サイト

運営サイト

色々

最近のトラックバック