2011-11-18 74 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值。

感谢您的帮助,一切。