2017-01-18 74 views
1

我使用CakePHP 2.5錯誤條件betweeen模型,需要加入VehicleAddress表,其中vei_id是外鍵CakePHP的避免

我有一個是產生了兩個模型錯誤條件一個查找操作: VehicleAddress

Addressvei_id列,這是加入車輛表的外鍵。

該查詢生成vehicle_id作爲加入兩個表的列,probem是該列甚至不存在。

我已經使用vei_id列映射了兩個模型。

我該如何避免這種情況?似乎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 

你這樣做加入兩個表嗎?

當你使用包含這些東西的時候,是由cakephp的約定完成的。 地址表已加入車輛表。

請看這裏:Cakephp contain

另外爲什麼不遵循cakephp約定?

If you have vehicles table, 
the foreign key would be vehicle_id according to cakephp convention. 
And if you have users table foreign key would be user_id. 

這些東西也減少了你的工作,使事情變得更容易。

看到這裏:(cakephp model and database conventions)。