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


Column not found ERROR in my first CakePHP project

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

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

应该是

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

我该如何纠正?

错误:SQLSTATE[42S22]:找不到列:1054子句""中的未知列"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'); 
}
?>

[….]这是因为

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

应该是

(`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表中。

关于(Trip.city_id=City.id

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

由于在您的以下关联中:

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

您没有定义任何外键,因此根据cakepp的约定,它会自动搜索字段"city_id"字段,并且您已经创建了该字段,因此创建了查询。

解决方案:

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