2017-01-18 7 views
1

間違った条件betweeenモデルを避け、vei_idがどこにあるかAddressテーブルでVehicleテーブルに参加する必要があり、外部キーCakePHPの私は、CakePHP 2.5を使用しています

私は2つのモデルのために間違った条件を生成している1つの検索操作を持っています。 VehicleおよびAddress

Addressには、車両テーブルに参加するための外部キーであるvei_id列があります。

クエリは、2つのテーブルを結合する列としてvehicle_idを生成していますが、この列は存在しないということです。

vei_id列を使用して2つのモデルをマッピングしました。

どうすればこのような状況を回避できますか?私が既に必要な列を使用して条件を記述していても、cakephpが結合列を推測しようとしているようです。

//Vehicle Model 
public $hasOne = array(
      'Address' => array(
       'className' => 'Address', 
       'conditions' => array('Vehicle.vei_id = Address.vei_id'), 
       'foreignkey' => false 
      ) 

//Address Model 
public $belongsTo = array(
    'Vehicle' => array(
     'className' => 'Vehicle', 
     'conditions'=> array('Vehicle.vei_id=Address.vei_id'), 
     'foreignKey' => 'vei_id' 
    ), 
); 

//At vehiclecontroller 
$data = $this->Vehicle->find('first', array(
    'conditions' => array('Vehicle.vei_id' => $vehicleId), 
    'contain' => array(
     'Address' => array('conditions'=> array('Address.vei_id'=>'Vehicle.vei_id', 
                  'Vehicle.vei_id' => $vehicleId 
              ), 
          )), 
)); 

それは、この行を生成します。

この列は存在しません
LEFT JOIN Address ON (
    Address.vehicle_id = Vehicle.vei_id 
    AND Address.vei_id = 'Vehicle.vei_id' 
    AND Vehicle.vei_id = 123 
) 

Address.vehicle_id = Vehicle.vei_id 
+0

なぜVehicle.vei_idを使用していますか?車両テーブルにvei_id列がありますか? Vehicle.idである必要がありますように見えます。 –

+0

このようにプライマリキーに名前を付けるための内部規約があり、vei_id列が存在し、vehicle_idは存在しません。ですから私の唯一の選択は、以前の既存のリレーショナルモデルにcakephpを適用しようとすることです –

答えて

2

あなたのクエリは少し混乱になります。

ちょうど以下の条件を見てください内包:

'contain' => array(
    'Address' => array('conditions'=> 
     array(
      'Address.vei_id'=>'Vehicle.vei_id', // why is this ? 
      'Vehicle.vei_id' => $vehicleId 
      ), 
)); 

なぜ次の条件を使用していますか?

Address.vei_id'=>'Vehicle.vei_id 

次の2つのテーブルを結合することをしましたか?

これらを含むものは、cakephpの規則に従って行われます。 アドレステーブルは既に車両テーブルと結合されています。

ここをクリックしてください:Cakephp contain

なぜcakephp conventionに従わないのですか?

これらはまた、作業を軽減し、作業を容易にします。

ここをクリック(cakephp model and database conventions)。

関連する問題