1

Model1があり、それがhasOneまたはその他の関係によって Model2に関連付けられていないとします。Model2 から情報にアクセスするにはどうすればよいですか?

私は次の方法を試しました:

モデル/Model1.php

class Model1 extends AppModel{

public function getInfo(){

  App::uses('Model2','Model');

  $mod2_info=$this->Model2->find('all');
  return $mod2_info;

 }
}//end of class

コントローラー/Model1sController.php

class Model1sController extends AppController{

public function index(){

 set('info', $this->Model1->find('all'));

 }
}//end of class

ビュー/Model1/index.ctp

   <?php var_dump($info);   ?>

ブラウザー出力:
致命的なエラー: Model/Model1.php の非オブジェクトに対するメンバー関数 find() の呼び出し

4

3 に答える 3

1

アドホックな関連付けを作成できるメソッドbindModelあります。

もちろん、bindModelモデルのデータベース テーブルに有効な外部キーを使用する必要があります。loadModel別の方法として、Model1sControllerで使用できます。

$this->loadModel('Model2');

その後、 Model2の find メソッドが使用可能になります。loadModelただし、厳密にはコントローラーメソッドであるため、モデルで使用することはできず、おそらく探しているものではありません。

最後に、Model1内でModel2インスタンスを取得し、次のようにしてその find メソッドを使用できます。

$Model2 = ClassRegistry::init('Model2');
$Model2->find('all');
于 2012-04-12T08:31:43.340 に答える
1

これを処理するには 2 つの方法があり$usesます。Controller のすべてのメソッドがモデルを使用する必要がある場合は、配列を使用できます。コントローラが必然的にこれらのモデルに依存する場合に使用します。

この例では、ProductionController はすべてのメソッドでこれら 3 つのモデルを使用するため、それらは$usesコントローラーの必要な部分として組み込まれています。

 var $uses = array('DailyProdn', 'ProdnMode', 'Prod');

これによりオーバーヘッドが追加されることに注意してください。そのため$uses、このモデルが*コントローラーの必要な部分*である場合にのみ使用してください。それ以外の場合は、モデルをアドホックに読み込みます。$this->loadModel()アドホック スタイルでメソッド内のモデルを読み込むために使用できます。

ここでは、ProductionController が Plant モデルをロードしています。find()ectのプラント モデルにアクセスする前に、これをメソッド内に配置します。これは、いくつかのメソッドでモデルをアドホックに使用する必要がある場合に最適です。

 $this->loadModel('Plant');
于 2012-04-12T15:19:59.867 に答える
0

最初のモデルの上にこれを書きます:

App::uses('MyModel', 'Model');

ただし、別の方法で呼び出す必要があります。

$my_model = new MyModel();
$my_model->anyOtherMethod();
$my_model->read(null, '1');

詳しくはこちらから

于 2014-01-14T12:54:32.163 に答える