我有以下型号:
class AppModel extends Model {
public $actsAs = array('Containable');
public $recursive = -1;
}
class City extends AppModel { // for "cities" table
public $belongsTo = 'Country';
}
class Country extends AppModel { // for "countries" table
public $hasMany = 'City';
}
..如何获取某个国家/地区的城市。我正试图找出这样的事情:
$countries = $this->Country->first(); // fetch a country
$cities = $country->city->find('all'); // get the cities for that country
我已经以这种方式设置AppModel,以避免每次呼叫一个国家时都取城。有时我不需要检索所有城市,因此不需要默认连接。但是,有时候我确实想要为某个国家取得城市。以下是我了解的唯一方法:
$cities = City->find('all', array(
'conditions' => array(
'City.country_id' => $country['Country']['id']
)
))
一旦在模型中建立了关系,这是访问城市的最便捷方式吗?如果是这样,我真的不明白为什么要烦扰$ belongsTo和/或$ hasMany。感谢
答案 0 :(得分:0)
当您使用CakePHP Model关系时,则不需要编写Join查询。
首先在国家模型中添加以下内容
class Country extends AppModel { // for "countries" table
public $recursive = 1;
public $hasMany = 'City';
}
只需编写以下代码,
$countries = $this->Country->find('all');
您可以以数组格式从$ country获取城市。
答案 1 :(得分:0)
关联模型首先会找到主模型,然后会根据第一个查询找到关联模型。因此,根据相关的模型条件限制它们是不可能的。因此,如果您想根据相关模型限制主模型,您有两个选择:
Join
查找做反向查找。这意味着您可以根据条件查找City
,并包含与其关联的Country
。例如(假设您在CountriesController
上):
$this->Country->City->find('all', array(
'conditions' => array(
//your conditions
),
'contain' => array('Country')
));