2011-08-29 43 views
1

device.php:CakePHP的:沒有的hasMany工作

var $hasOne = array(  
     'Monitordevice' => array(
      'className' => 'Monitordevice', 
      'foreignKey' => 'deviceId', // 'deviceId' 
      'conditions' => '',  
     ) 
    ); 

    var $hasMany = array( 
     'CreativeSchedule' => array(
        'className' => 'CreativeSchedule', 
        'foreignKey' => 'deviceId', 
        'conditions' => '',  

        ) 

    ); 

creative_schedules.php

var $belongsTo = array(
     'Device' => array(
      'className' => 'Device', 
      'foreignKey' => 'deviceId', 
        'conditions' => '',  
     ) 
    ); 

當我把這個:

$ all_devices = $這個 - >設備 - > CreativeSchedule->找到( '全部');

設備表是不與任何creative_schedules加入

,而不是我得到2個查詢:

SELECT `Device`.`id`, ....FROM `devices` AS `Device` LEFT JOIN `monitordevices` AS `Monitordevice` ON (`Monitordevice`.`deviceId` = `Device`.`id`) 

SELECT `CreativeSchedule`.`id`, ....FROM `creative_schedules` AS `CreativeSchedule` WHERE `CreativeSchedule`.`deviceId` IN (1, 2, 3, 4, 5, 6, 7) 
+0

任何未知的列錯誤? –

+1

您是否在代碼中的其他位置設置了「recursive」選項?設置'recursive => -1'告訴CakePHP不要加入相關的模型。 – elitalon

+0

不,但我的問題已解決,爲設備模型定義了primary_key字段。 – vibha

回答

1

使用Containable

在這兩個類,添加:

var $actsAs = array('Containable'); 

然後你發現應該是這樣的:

$all_devices = $this->Device->CreativeSchedule->find('all', 'contain' => array('Device')); 

作爲一個方面說明,我不知道你在哪裏把查找(),如果該控制器使用CreativeSchedule,但是如果可以的話,只需考慮$ this-> CreativeSchedule-> find(...),因爲模型鏈可能會導致性能下降,並且它不會通過「鏈接」查詢他們的協會。 (我不確定你是否假設)

在最壞的情況下,如果你願意的話,你總是可以在控制器動作的頂部放置$ this-> loadModel('CreativeSchedule')。