4

検索プラグインを使用して、検索機能のために CakePHP 1.3 バージョンを使用しています。

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

  • デモ、

Demoには 2 つの外部キーがあり、country_idstate_id. Stateは外部キーを持っていますcountry_id

私がやっていることは、国と州のテーブルからすべてのデータを取得する国と州のドロップダウンを持つ検索フォームがあることです。ドロップダウンから国を検索してフォームを送信すると、以下のエラーが表示されます。状態ドロップダウンのみを使用して検索すると、正しい結果が得られます。

検索クエリを実行すると、エラーが発生します

「列 ' country_id' where 句があいまいです」

私のクエリは次のとおりです。

SELECT `Demo`.`id`, `Demo`.`demo2`, `Demo`.`desc`, `Demo`.`subject`, `Demo`.`gender`, `Demo`.`country_id`, `Demo`.`state_id`, `Demo`.`image_url`, `Country`.`id`, `Country`.`name`, `State`.`id`, `State`.`country_id`, `State`.`description` FROM `demos` AS `Demo` LEFT JOIN `countries` AS `Country` ON (`Demo`.`country_id` = `Country`.`id`) LEFT JOIN `states` AS `State` ON (`Demo`.`state_id` = `State`.`id`) WHERE `country_id` = 2

デモ テーブルのモデル関係:

var $belongsTo = array(
    'Country' => array(
        'className' => 'Country',
        'foreignKey' => 'country_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),

    'State' => array(
        'className' => 'State',
        'foreignKey' => 'state_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
);

ドロップダウンですべての国を取得するコントローラー クエリは次のとおりです。

$country=$this->Country->find('list'); //ドロップダウンで国のリストを表示するだけ

Countryクエリは、 ( )を除くすべてのフィールドからデータを検索します。これは、 table と table のどちらから探しているcountry_idかがわからないためです。正しい結果を得るには、デモ テーブルの が必要です。country_idDemoStatecountry_id

4

2 に答える 2

2

私が理解しているように、特定のデモの検索を行いたいと考えていますcountry_id。これらのテーブルの複数にそのような列があるため、使用している「country_id」を定義する必要があります。

を使用するだけDemoです。country_id条件配列:

array('conditions' => array('Demo.country_id' => 2));

そして、Cake によって生成された SQL が次のように表示されるはずです。

SELECT `Demo`.`id`, `Demo`.`demo2`, `Demo`.`desc`, `Demo`.`subject`, `Demo`.`gender`, `Demo`.`country_id`, `Demo`.`state_id`, `Demo`.`image_url`, `Country`.`id`, `Country`.`name`, `State`.`id`, `State`.`country_id`, `State`.`description` FROM `demos` AS `Demo` LEFT JOIN `countries` AS `Country` ON (`Demo`.`country_id` = `Country`.`id`) LEFT JOIN `states` AS `State` ON (`Demo`.`state_id` = `State`.`id`) WHERE `Demo`.`country_id` = 2
于 2012-06-17T07:39:15.577 に答える
0

これを試して:

SELECT
Demo.id,
Demo.demo2,
Demo.desc,
Demo.subject,
Demo.gender,
Demo.country_id,
Demo.state_id,
Demo.image_url,
Country.id,
Country.name,
State.id,
State.country_id,
State.description

FROM demos AS Demo
LEFT JOIN countries AS Country ON (Demo.country_id = Country.id)
LEFT JOIN states AS State ON (Demo.state_id = State.id) WHERE Demo.country_id = 2
于 2012-06-15T12:53:23.197 に答える