2011-09-09 8 views
0

私は3つのテーブルを持っています。3つのテーブルのCakephpの関係

  • デバイスhasOneのDeviceGroup
  • グループhasManyのデバイス
  • 私は$this->Device->find('all');をすればDeviceGroup(デバイスグループに属している)

は、今では私は結果与える:今

Device => array 
DeviceGroup => array 

私はグループテーブルからの値も欲しいです、どうすればいいですか?

+0

DeviceGroupテーブルに余分なフィールドがありますか?そうでない場合は、HABTMの関係 – pleasedontbelong

答えて

1

これを達成するにはいくつかの方法があります。

それはのような単純なことがあります

$this->Device->find('all', array('recursive' => 2)); 

しかし、あなたは自動的に取得されます他のモデルを持っている場合には、重鎖および無駄はかなりのリソースすることができます。あなたは試してみて、自動的にあなたが既に持っているデバイスのグループの関係を含む別のモデルから検索を行う際に

var $hasOne = array(
    'DeviceGroup' => array(
    'className' => 'DeviceGroup', 
    'foreignKey' => 'device_group_id', 
    'dependent' => false, 
    'conditions' => '', 
    'fields' => '', 
    'order' => '' 
), 
    'Group' => array(
    'className' => 'Group', 
    'foreignKey' => false, 
    'dependent' => false, 
    'conditions' => 'Group.id = DeviceGroup.group_id', 
    'fields' => '', 
    'order' => '' 
) 
); 

これが問題になることができます。

もう一つの方法は、お使いの機種にグループクラスを追加することです検索のグループ。ですから、$ hasOneの中の何か他のもの、例えばDeviceGroupGroupのような名前を付けるのが賢明です。そして、あなたができるデバイスモデルにグループを追加することなく

class AppModel extends Model { 
    var $actsAs = array('Containable'); 
} 

とを:

私れる好ましい方法は、(ので、すべてのモデルが自動的に収容可能であることを有効に私はapp/app_model.phpでこれを行う)収容可能行動を可能にするだろう次の操作を行います。

$this->Device->find(
    'all', 
    array(
    'contain' => array('DeviceGroup', 'Group'), 
    'recursive' => 2, 
) 
); 

この方法は、あなたが比較的深い再帰されていても、あなたはあなたが実際にしたいモデルを取得されており、また、あなたのに'fields'パラメータを使用している場合あなたは一緒にジップします。

+0

としてモデル化することができます。 – vibha

関連する問題