我设置了两个模型:城市和国家。以下是我如何定义它们:
class City extends AppModel { // for "cities" table
public $hasOne = 'Country';
}
class Country extends AppModel { // for "countries" table
public $hasMany = array(
'City' => array(
'className' => 'City'
)
);
}
并在我的控制器中:
public function getCities() {
$this->loadModel('City');
$cities = $this->City->find('all');
}
但它给了我这个错误:
Database Error
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Country.city_id' in 'on clause'
SQL Query: SELECT `City`.`id`, `City`.`country_id`, `City`.`name`, `City`.`latitude`, `City`.`longitude`, `City`.`time_zone`, `City`.`dma_id`, `City`.`code`, `City`.`created`, `City`.`modified`, `Country`.`id`, `Country`.`country_id`, `Country`.`name`, `Country`.`code`, `Country`.`created`, `Country`.`modified` FROM `rtynbiz_ls`.`cities` AS `City` LEFT JOIN `rtynbiz_ls`.`countries` AS `Country` ON (`Country`.`city_id` = `City`.`id`) WHERE 1 = 1
Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp
我无法理解为什么它试图与Country表进行连接。我只想取城。我如何阻止这种情况发生?并且,为什么它尝试使用Country.city_id(它不存在)进行关联另外,我是否正确地命名了我的类和表?感谢
答案 0 :(得分:0)
以下代码行正在建立关系,因此JOIN存在于那里。要从查询中删除JOIN,只需替换:
class City extends AppModel { // for "cities" table
public $hasOne = 'Country';
}
class Country extends AppModel { // for "countries" table
public $hasMany = array(
'City' => array(
'className' => 'City'
)
);
}
使用:
class City extends AppModel { }// for "cities" table
class Country extends AppModel {} // for "countries" table
您可以按照this
轻松地在表格中建立关系答案 1 :(得分:0)
默认情况下,CakePHP会自动尝试提取其他模型的数据。要阻止它成为默认值,请在AppModel中设置此变量:
public $recursive = -1;
我还建议添加可控行为,因此您的应用模型如下所示:
<?php
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
}
详细了解&#34;递归&#34;和&#34;可控行为&#34;在CakePHP book。
答案 2 :(得分:0)
如果您想要检索数据不想加入,请将其递归-1
public function get_cities() {
$this->loadModel('City');
$this->City->recursive=-1;
$cities = $this->City->find('all');
//or
$cities = $this->City->find('all', array('recursive'=>-1));
}
这将是你的模特:
class Country extends AppModel {
public $hasMany = array(
'City' => array(
'className' => 'City',
'foreignKey' => 'country_id',
'dependent' => false,
),
);
}
class City extends AppModel {
public $belongsTo = array(
'Country' => array(
'className' => 'Country',
'foreignKey' => 'country_id',
)
);
}
确保您在这两个型号上没有杂乱的代码