错误:在cakephp控制器中的非对象上调用成员函数find()

时间:2012-07-13 16:23:15

标签: php cakephp

我是cakephp的新手并尝试使用控制台工具生成一些CRUD操作。除了一张桌子(最大的)之外,它的工作正常。

尝试添加新元素时,会返回:

  

错误:在非对象上调用成员函数find()   文件:C:\ wamp \ www \ cakephp \ app \ Controller \ ChantiersController.php
  行:50

这是第50行及以后的行:

    $programs = $this->Chantier->Program->find('list');
    $etats = $this->Chantier->Etat->find('list');
    $types = $this->Chantier->Type->find('list');
    $champsLibres = $this->Chantier->ChampsLibre->find('list');
    $feuillesDeRoutes = $this->Chantier->FeuillesDeRoute->find('list');
    $directionsPilotes = $this->Chantier->DirectionsPilote->find('list');
    $this->set(compact('programs', 'etats', 'types', 'champsLibres',    
            'feuillesDeRoutes', 'directionsPilotes'));

2 个答案:

答案 0 :(得分:14)

TLDR /答案:

您可以修复关联或加载模型,然后移除通话(->Chantier部分:

$this->loadModel('Program');
$programs = $this->Program->find('list');

详情/说明:

该错误基本上意味着您尝试在未加载到控制器中的模型上调用find()

默认情况下,会加载Controller的模型。而且,正如您所做的那样,您可以使用模型来加载模型。 (如果关联设置正确)。

例如:

//ChantiersController
$this->Pizza->find('all'); //ERROR - Pizza model isn't loaded

要解决此问题,只需在尝试使用之前加载模型:

$this->loadModel("Pizza");
$this->Pizza->find('all'); //All is good - loaded on the line above

在您的情况下,由于您似乎正在使用与Chantier模型的关联来查找其他模型,因此两种模型之间的关联可能不正确。

答案 1 :(得分:0)

如果您不想使用loadModel()函数,则可以定义

var $uses = array('Program');

您还可以在数组中提及其他型号名称