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

L. *_*nna 4 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'));
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 14

TLDR /答案:

您可以修复关联,也可以加载模型,然后删除直通(->Chantier部分:

$this->loadModel('Program');
$programs = $this->Program->find('list');
Run Code Online (Sandbox Code Playgroud)

细节/说明:

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

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

例如:

//ChantiersController
$this->Pizza->find('all'); //ERROR - Pizza model isn't loaded
Run Code Online (Sandbox Code Playgroud)

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

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

在您的情况下,由于看起来您正在使用与Chantier模型的关联来通过其他模型进行查找,因此两个模型之间的关联可能不正确.