在我的第一个CakePHP项目中未找到列错误

在我的第一个CakePHP项目中未找到列错误,php,mysql,cakephp,mysql-error-1054,Php,Mysql,Cakephp,Mysql Error 1054,我正在使用CakePHP,我得到了以下错误! 这是因为 ON (`Trip`.`city_id` = `City`.`id`) 应该是 (`City'.`city_id` = `Trip`.`id`) (`City'.`city_id` = `Trip`.`id`) 我该怎么纠正呢 错误:SQLSTATE[42S22]:未找到列:“on子句”中的1054未知列“Trip.city_id” SELECT `Trip`.`id`, `Trip`.`user_id`, `Trip`.`t

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

ON (`Trip`.`city_id` = `City`.`id`)
应该是

(`City'.`city_id` = `Trip`.`id`)
(`City'.`city_id` = `Trip`.`id`)
我该怎么纠正呢

错误:SQLSTATE[42S22]:未找到列:“on子句”中的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` = `Trip`.`id`)
不,它不应该这样做,后者完全没有意义,
`City`.`City\u id`
将表示一个自连接,并且在任何情况下,单个城市只能与单个其他记录关联,这是没有意义的

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

请参见

因此,要解决此问题,请将适当的
city\u id
外键添加到
trips
表中

在(
Trip
city\u id
=
city
id

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

因为在你下面的联想中:

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

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

解决方案:


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

请始终提及您的确切CakePHP版本,并相应地标记您的问题!