0

私は次のモデルを持っています:

class Adjustment extends AppModel {
   var $name = 'Adjustment';       
    var $belongsTo = array(
    'Source_Budget'=>array('className'=>'Budget','foreignKey'=>'s_budget_id'),
    'Target_Budget'=>array('className'=>'Budget','foreignKey'=>'t_budget_id'),
    'Source_Project'=>array('className'=>'Project','foreignKey'=>'s_project_id'),
    'Target_Project'=>array('className'=>'Project','foreignKey'=>'t_project_id')

  );

モデル予算とプロジェクトは以下の通り

class Budget extends AppModel {
var $name='Budget';
var $belongsTo = array('Year');
var $hasMany=array('Project','Payment','Revenue',
'AdjustmentFrom'=>array('className'=>'Adjustment','foreignKey'=>'s_budget_id'),
'AdjustmentTo'=>array('className'=>'Adjustment','foreignKey'=>'t_budget_id'),
'TransferFrom'=>array('className'=>'Transfer','foreignKey'=>'s_budget_id'),
'TransferTo'=>array('className'=>'Transfer','foreignKey'=>'t_budget_id')
 );

class Project extends AppModel {
   var $name = 'Project';
   var $belongsTo = array('Budget','Year');

    var $hasMany=array('Payment','Revenue',
'AdjustmentFrom'=>array('className'=>'Adjustment','foreignKey'=>'s_project_id'),
'AdjustmentTo'=>array('className'=>'Adjustment','foreignKey'=>'t_project_id'),
'TransferFrom'=>array('className'=>'Transfer','foreignKey'=>'s_project_id'),
'TransferTo'=>array('className'=>'Transfer','foreignKey'=>'t_project_id')
  );

調整を追加/削除/更新するスキャフォールディングを使用してコントローラーを正常に作成しましたが、コードをベイクすると、調整を追加しようとすると「エラー: 非オブジェクトでメンバー関数 find() を呼び出します」というメッセージが表示されます。

エラーは次の行にあります。

$sourceBudgets = $this->Adjustment->SourceBudget->find('list');
$targetBudgets = $this->Adjustment->TargetBudget->find('list');
$sourceProjects = $this->Adjustment->SourceProject->find('list');
$targetProjects = $this->Adjustment->TargetProject->find('list');
$this->set(compact('sBudgets', 'tBudgets', 'sProjects', 'tProjects'));

もちろん、SBudget、TBudget、SProject、TProject というモデルは存在しないため、以下のようにコードを編集しました。

   $sourceBudgets = $this->Adjustment->Budget->find('list');
   $targetBudgets = $this->Adjustment->Budget->find('list');
   $sourceProjects = $this->Adjustment->Project->find('list');
   $targetProjects = $this->Adjustment->Project->find('list');
   $this->set(compact('sBudgets', 'tBudgets', 'sProjects', 'tProjects'));

そして、 public $uses = array('Budget', 'Project'); という行を追加しました。

調整コントローラー クラス。残念ながら、問題は解決せず、常に「エラー: 非オブジェクトでメンバー関数 find() を呼び出します」というメッセージが表示されます。

4

3 に答える 3

0

モデル内の名前の一貫性を保つようにしてください。それ以外の:

' SourceBudget '=>array('className'=>'Budget','foreignKey'=>' s_budget_id '),

次のいずれかを記述します。

' SBudget '=>array('className'=>'Budget','foreignKey'=>' s_budget_id '),

または (データベースを更新する必要があります):

' SourceBudget '=>array('className'=>'Budget','foreignKey'=>' source_budget_id '),

したがって、怠惰な人は簡単に次のように言えます。

' SBudget '=>array('className'=>'Budget'),

また:

' SourceBudget '=>array('className'=>'Budget'),

ええと、それを理解するのに何時間もかかりました。CakePHP の連中は、「構成よりも規約の大ファンです」;-)

于 2013-06-27T16:40:50.923 に答える
0

見つけた !!!

問題は、コントローラーで生成され、set でビューに渡された変数がビューで正しく使用されないことです。説明させてください:

ベイクによって生成された変数

$sourceBudgets = $this->Adjustment->Budget->find('list'); それを追加ビューに渡しました。ただし、追加ビューは s_budget_id という変数を使用していました。モデルで宣言されている外部キー フィールドと同じです。

于 2013-02-21T20:43:34.540 に答える
0

コードの最初のブロックの属している関連付けで使用したエイリアスが間違っています。代わりSource_BudgetSourceBudget. 同様に、他のエイリアスについてもアンダースコアを削除します。

于 2013-02-17T19:39:51.010 に答える