0

Company hasMany CompanyReview をバインドしようとしています。以下は、コントローラー内のコードです。

public function review() {
    $this->uses = array('Search', 'Company', 'CompanyReview');
    $this->Company->bindModel(array(
        'hasMany' => array(
            'CompanyReview' => array(
            'className' => 'CompanyReview',
            'foreignKey' => 'company_id'
            )
        )
    ));
    $this->CompanyReview->bindModel(
        array(
           'belongsTo'=>array(
                'Company'=>array(
                    'className'=>'Company',
                    'foreignKey'=>'company_id'
                 )
            )
        )
    );

    if (!empty($this->data)) {
        switch ($this->data['Search']['search_type']) {
            case 'all':
                $this->request->data['ReviewResults'] = $this->allReviews($this->data['Search']['search_query']);
                break;
            case 'company':
                $this->request->data = $this->Company->find('all', array(
                   'conditions' => array(
                      'OR' => array(
                          'MATCH(Company.name) against ("' . $this->data['Search']['search_query'] . '" in boolean mode)',
                          'MATCH(CompanyReview.job_title) against ("' . $this->data['Search']['search_query'] . '" in boolean mode)'
                           )

                        )
                    ));
                break;
            case 'interview':
                $this->request->data['ReviewResults'] = $this->interviewReviews($this->data['Search']['search_query']);
                break;
            case 'salary':
                $this->request->data['ReviewResults'] = $this->salaryReviews($this->data['Search']['search_query']);
                break;
            }
        }
    }

しかし、私が取得し続けるエラーは次のとおりです:データベースエラー

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'CompanyReview.job_title' in 'where clause'

SQL クエリ:

SELECT Company.id, Company.name, Company.industry_id, Company.website, Company.created FROM terbang2.companies AS Company WHERE ((MATCH(Company.name) against ("air" in boolean mode)) OR (MATCH(CompanyReview.job_title) against ("air" in boolean mode)))

注意: このエラー メッセージをカスタマイズする場合は、app/View/Errors/pdo_error.ctpを作成します。

お気づきかもしれませんが、SQL には company_reviews テーブルが含まれていませんでした。どうですか?助けてください!。ありがとう

ところで、company_reviews テーブルには job_title というテーブル行があります。

4

2 に答える 2

0

Cake はand$this->CompanyReview->find();の場合にのみ join を行うため、cake automagic を機能させたい場合は使用してください。と HABTM には別々のクエリがあります。会社で検索したい/する必要がある場合は、@Dave が言及した結合を行う必要があります。$belongsTo$hasOne$hasMany

ノート。両方の方法でバインドする必要はありません。Company で見つかった場合は、Company モデルのみにバインドします。

于 2012-12-29T13:38:31.940 に答える
0

[Joins]を使用する必要があります。

関連付けから自動構築された「通常の」クエリは、実際にはモデルごとに個別のクエリを実行するため、テーブルに存在しないフィールドを参照することはできません。試しました。

于 2012-12-29T04:55:25.023 に答える