4

私はcakephpを初めて使用し、コンソールツールを使用していくつかのCRUD操作を生成しようとしました。1つのテーブル(最大)を除いて正常に動作します。

新しい要素を追加しようとすると、次のように返されます。

エラー:非オブジェクトファイルでメンバー関数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()このエラーは基本的に、コントローラーにロードされていないモデルを呼び出そうとしていることを意味します。

デフォルトでは、コントローラーのモデルがロードされます。そして、あなたがしているように、あなたはロードされたモデルを通してモデルを使うことができます。(関連付けが正しく設定されている場合)。

例えば:

//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て他のモデルを検索しているように見えるため、2つのモデル間の関連付けが正しくない可能性があります。

于 2012-07-13T17:44:03.350 に答える
0

loadModel()関数を使用したくない場合は、次のように定義できます。

var $uses = array('Program');

配列内で他のモデル名についても言及できます

于 2015-06-30T07:50:53.073 に答える