私は3つのテーブルを持っています。3つのテーブルのCakephpの関係
- デバイスhasOneのDeviceGroup
- グループhasManyのデバイス
- 私は
$this->Device->find('all');
をすればDeviceGroup(デバイスグループに属している)
は、今では私は結果与える:今
Device => array
DeviceGroup => array
私はグループテーブルからの値も欲しいです、どうすればいいですか?
私は3つのテーブルを持っています。3つのテーブルのCakephpの関係
$this->Device->find('all');
をすればDeviceGroup(デバイスグループに属している)は、今では私は結果与える:今
Device => array
DeviceGroup => array
私はグループテーブルからの値も欲しいです、どうすればいいですか?
これを達成するにはいくつかの方法があります。
それはのような単純なことがあります
$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'
パラメータを使用している場合あなたは一緒にジップします。
としてモデル化することができます。 – vibha
DeviceGroupテーブルに余分なフィールドがありますか?そうでない場合は、HABTMの関係 – pleasedontbelong