4

我是 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'));
4

2 回答 2

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模型的关联来查找其他模型,因此两个模型之间的关联可能不正确。

于 2012-07-13T17:44:03.350 回答
0

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

var $uses = array('Program');

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

于 2015-06-30T07:50:53.073 回答