我正在使用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');
}
?>
答案 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)
开启(
Trip
。city_id
=City
。id
)
以上查询是因为您关联模型的方式。
因为你的下面的关联:
<?php
class Trip extends AppModel
{
public $name= 'Trip';
public $belongsTo= array('City');
}
?>
你没有定义任何外键,因此根据cakephp的惯例,它会自动搜索字段&#39; city_id&#39;字段,你已经创建了它,因此查询。
解决方案:
您必须在关联中定义外键属性。