在我的第一个CakePHP项目中找不到ERROR列

时间:2014-10-04 15:25:30

标签: php mysql cakephp mysql-error-1054

我正在使用CakePHP,我收到以下错误! 这是因为

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

应该是

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

我如何纠正?

  

错误:SQLSTATE [42S22]:找不到列:1054'on子句'中的未知列'Trip.city_id'

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'); 
}
?>

2 个答案:

答案 0 :(得分:1)

  

[....]这是因为

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

应该是

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

不,它不应该,后者完全没有意义,`City`.`city_id`表示自我加入,并且在任何情况下,单个城市只能与单个其他记录相关联,毫无意义normalization明智。

CakePHP生成的前一个表达式绝对正确,在belongsTo关联中,外键由当前模型保存。

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

因此,要解决此问题,请在city_id表中添加正确的trips外键。

答案 1 :(得分:0)

  

开启(Tripcity_id = Cityid

以上查询是因为您关联模型的方式。

因为你的下面的关联:

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

你没有定义任何外键,因此根据cakephp的惯例,它会自动搜索字段&#39; city_id&#39;字段,你已经创建了它,因此查询。

解决方案:

您必须在关联中定义外键属性。