間違った条件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
なぜVehicle.vei_idを使用していますか?車両テーブルにvei_id列がありますか? Vehicle.idである必要がありますように見えます。 –
このようにプライマリキーに名前を付けるための内部規約があり、vei_id列が存在し、vehicle_idは存在しません。ですから私の唯一の選択は、以前の既存のリレーショナルモデルにcakephpを適用しようとすることです –