2014-10-04 88 views
0

我正在使用CakePHP,並且出現以下錯誤! 這是因爲在我的第一個CakePHP項目中找不到錯誤

ON (`Trip`.`city_id` = `City`.`id`) 

應該

(`City'.`city_id` = `Trip`.`id`) 

我應如何修正呢?

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Trip.city_id' in 'on clause'

SELECT 
    `Trip`.`id`, `Trip`.`user_id`, `Trip`.`type_id`, `Trip`.`title`, 
    `Trip`.`city1`, `Trip`.`city2`, `Trip`.`date`, `Trip`.`free_places`, 
    `Trip`.`description`, `Trip`.`contact_email`, `Trip`.`created`, 
    `City`.`city_id`, `City`.`city_name` 
FROM 
    `mitfahr-ar`.`trips` AS `Trip` 
LEFT JOIN 
    `mitfahr-ar`.`cities` AS `City` ON (`Trip`.`city_id` = `City`.`id`) 
WHERE 1 = 1 

我的模型代碼是:

<?php 
class Trip extends AppModel 
{ 
    public $name= 'Trip'; 
    public $belongsTo= array('City'); 
} 
?> 
+0

請始終提及您的確切CakePHP版本並相應地標記您的問題! – ndm 2014-10-04 15:50:53

回答

1

[....] Which is because

ON (`Trip`.`city_id` = `City`.`id`) 

Should be

(`City'.`city_id` = `Trip`.`id`) 

不,應該不是,後者使得完全沒有意義,`City`.`city_id`將表明自聯接,並且在任何情況下,單個城市只能與其他單個記錄相關聯,這是沒有意義的。

由CakePHP生成的前一個表達式是絕對正確的,在belongsTo關聯中,外鍵由當前模型持有。

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto

因此,要解決這個問題,添加適當city_id外鍵的trips表。

0

ON (Trip . city_id = City . id)

上面的查詢是因爲您關聯模型的方式。

由於在下面assocaiton:你是不是定義,因此根據CakePHP的約定的任何外鍵

<?php 
class Trip extends AppModel 
{ 
    public $name= 'Trip'; 
    public $belongsTo= array('City'); 
} 
?> 

,它會自動搜索領域「city_id」字段,你已經創建了,因此查詢。

解決方案:

您必須在關聯中定義外鍵屬性。

相關問題