我正在使用一個遺留數據庫,它的關鍵字遵循一個約定,但不幸的是,這不是蛋糕約定,而且我遇到了一些與可容忍行爲有關的奇怪事情 - 它們拉錯了數據。這裏是我的設置:非標準密鑰的可行性問題?
TechnologyIncentive belongsTo...
array(
'Incentive' => array(
'className' => 'Incentive',
'type' => 'inner',
'foreignKey' => false, # actually 'incentive_id', but we need to fool Cake
'conditions' => array('TechnologyIncentive.incentive_id = Incentive.incentive_id'),
),
'Technology' => array(
'className' => 'Technology',
'type' => 'inner',
'foreignKey' => false, # actually 'incentive_tech_id', but we need to fool Cake
'conditions' => array('TechnologyIncentive.incentive_tech_id = Technology.incentive_tech_id')
),
);
你可以看到,我已經有愚弄蛋糕到由foreignKey
設置爲false,並確定在我的where子句中的鏈接與我的非標準鍵的工作。到現在爲止還挺好。
現在,當我嘗試運行從TechnologyIncentive
型號查詢:
$this->find('all', array(
'contain' => array('Incentive', 'Technology'),
'fields' => array('Incentive.name', 'Technology.name', 'TechnologyIncentive.amount'),
'conditions' => array(/** conditions... */)
);
一切都很正常。東西很好包含,我得到了我期望的。然後我需要包含一個TechnologyGroup
,其中hasMany Technology
和事情由於某種原因而崩潰。現在
我contain
選項如下:
'contain' => array('Incentive', 'Technology' => array('TechnologyGroup'))
而我得到的回覆是一個Incentive
記錄中包含的優惠記錄。這並不令人感到意外,因爲我在一個地方指定了幾個字段(主要是fields
選項),並且隱含地選擇了contain
選項中的所有字段,但真正對我來說很奇怪的是它們是不同的激勵。 「包含」的激勵措施是錯誤的。
檢查SQL,它看起來像查詢運行時沒有任何有效的where子句,所以一切都被拉動,然後人爲限制爲一條記錄。請注意0和$result['Incentive']['Incentive']['incentive_id']
之間的差異。
Array
(
[Incentive] => Array
(
[incentive_id] => MD046
[name] => Incentive name
[category] =>
[Incentive] => Array
(
[incentive_id] => AK004
[code] => AK04F
[version] => 2
[category] => Incentive Category
)
)
)
有沒有人碰到過這個?直到我想檢索一個擴展記錄(TechnologyGroup
),這不是問題。任何想法將不勝感激。