2011-11-18 76 views
0

我有一個Model::find()調用會產生一個我以前從未見過的SQL警告。我希望別人能夠通過指引我正確的方向來節省我一些時間。這裏的錯誤:CakePHP沒有選擇

SELECT FROM `fica_alternative_plans` AS `FicaAlternativePlan` 
WHERE `FicaAlternativePlan`.`district_id` = '4ec642e2-8270-4b74-b50d-9ca2147402e8' 

很容易看到的錯誤(在選擇列表中沒有字段),當然,但我想知道我是怎麼到這個位置。呼叫Model::find()發生在DistrictsController。正如你在下面看到的,只有少數幾個相關模型(包括那些被註釋掉的和這個)會引發這種錯誤。

$district = $this->District->find(
    'first', 
    array(
    'contain' => array(
     '403bServiceModel' => array('ServiceProvider' => array('Address')), 
     '457bServiceModel' => array('ServiceProvider' => array('Address')), 
     'BusinessOfficer', 
     'County', 
     'FicaAlternativePlan', // => array('ServiceProvider' => array('Address')), 
     'PayrollContact', 
     'PrimaryContact', 
     // 'Section125Plan' => array('ServiceProvider' => array('Address')), 
     // 'SpecialFinalPayPlan' => array('ServiceProvider' => array('Address')), 
     // 'VebWorksitePlan' => array('ServiceProvider' => array('Address')), 
     'School' => array(
     'order' => array('School.name'), 
     'PhysicalAddress' 
    ), 
     'Superintendent', 
     'UnionPresident', 
    ), 
    'conditions' => array('District.id' => $id), 
) 
); 

該協會是非常標準的,所以我不知道什麼樣的條件可能會導致這種事情。顯然,我已經發了一些東西,但我現在沒有看到它。

謝謝。

UPDATE

我要補充一點,District hasOne FicaAlternativePlan(同樣爲每個拋出警告的人,也同樣爲403bServiceModel457bServiceModel其正常工作)。

+0

對不起,如果這是一個天真的問題,但什麼是「包含」?我沒有在文檔中看到它。 – eaj

+0

你有沒有嘗試過,在像''fields'=> array('District。*')'選項中添加字段?你有沒有嘗試擦除緩存? (有時它緩存模式) – api55

+0

@eaj包含是[行爲(包含)](http://book.cakephp.org/view/1323/Containable) – api55

回答

0

呃,找到它了。

失敗的模型不直接擴展AppModel,但具有擴展它的超類(Plan)。看起來,超級類用於分組,因此它的$useTable設置爲false,失敗的模型正在繼承該值。其他類擴展相同的超級類,但是每個非標準都以某種方式要求$useTable屬性無論如何被覆蓋 - 這就是爲什麼所有都沒有失敗。

如果不明顯,答案是設置$useTable值以覆蓋超類中的false值。

感謝您的幫助,一切。