0

私のタイトルは素朴に見えますが、可能な限りすべてを読んだり、検索したり、テストしたりしたと言わざるを得ませんが、私の find() メソッドは、SQL クエリの関連テーブルへの JOIN を実装していません。他のプロジェクトでは問題なく数回使用しましたが、ここでは...

ここに私の2つのモデル(関連するモデルの手動定義以外は特別なものはありません):

class Pflanzen extends AppModel {
    public $useTable = 'pflanzen';
    public $hasAndBelongsToMany  = array(
                        'Herbar'  => array(
                                        'order'=>'Herbar.order ASC',
                                        'joinTable' => 'herbar_pflanzen',
                                        'foreignKey' => 'pflanzen_id',
                                        'associationForeignKey' => 'herbar_id') 
            );
}
class Herbar extends AppModel {
    public $useTable = 'herbar';
    public $hasAndBelongsToMany = array(
              'Pflanzen' => array('joinTable' => 'herbar_pflanzen',
                                  'foreignKey' => 'herbar_id',
                                  'associationForeignKey' => 'pflanzen_id')
           )
}

ここで、「Herbar」コントローラーでの私のクエリ(これ以上正常になることはできません...):

$pflanzen = $this->Herbar->Pflanzen->find('all',array(
                          'fields'=>array('Herbar.name','Pflanzen.linkplatter'),
                          'conditions' => array('Pflanzen.linkplatter' => true),
                          'order' => 'Herbar.name',
                          'limit' => 10,
                          'recursive'=>2)
                         );
$this->set('pflanzen',$pflanzen);

ビューの結果のエラー:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Herbar.name' in 'field list'

SQL Query: SELECT `Herbar`.`name`, `Pflanzen`.`linkplatter`, `Pflanzen`.`id` FROM `burgerbib`.`platter_pflanzen` AS `Pflanzen` WHERE `Pflanzen`.`linkplatter` = '1' ORDER BY `Herbar`.`name` ASC LIMIT 10

SQL では JOIN ではないことがわかります。どうして ??私は何を間違っていますか?何時間も検索していて解決策が見つからず、Google を使用しても何も見つからなかったので、本当に助けていただければ幸いです。前もって感謝します !!

4

2 に答える 2

0

HABTM は結合されたクエリを作成しません。すべてのベース レコードのクエリを作成し、必要に応じて各関係のクエリを作成して配列を埋めます。あなたの条件は結合を前提としているため、エラーが発生します。

パラメータを使用して結合を強制でき'joins'ます。http://book.cakephp.org/1.2/en/view/872/Joining-tables

于 2012-09-10T13:26:58.327 に答える
-1

結局のところ、これを行うためのより良い方法は、containable 動作を使用することです。Force Join は、包含可能な動作が必要に応じない場合にのみ役立ちます。

http://book.cakephp.org/2.0/fr/core-libraries/behaviors/containable.html#using-containable

于 2012-09-11T07:00:04.337 に答える