城市属于通过县城协会,如何简化代码?

时间:2010-02-09 21:08:29

标签: php sql cakephp model associations

表格

Province hasMany CountyCounty belongsTo ProvinceCounty hasMany CityCity belongsTo County

基本上类似于:City belongsThroughCountyTo Province

情况:

在搜索表单中,我有一个带省份的选择下拉菜单。

“代码”:

当我列出结果时,我首先获得属于指定省份的县的ID,然后执行City.county_id IN (array_of_counties_ids_here)

问题:

我的问题是,我能以更好的方式做到吗?没有首先访问县表。一个简单的三向连接应该可以解决问题,但我不知道如何在Cake中实现它。

在cities表中添加province_id字段不是我的解决方案(不能改变表格)。

1 个答案:

答案 0 :(得分:1)

您应该通过在SQL中创建一个直接将City链接到Province的视图来避免这种情况。

假设你有:

tblCity
  city_id
  county_id
  name --etc
tblCounty
  county_id
  province_id
  name --whatever else
tblProvince
  province_id
  --whatever else

create or replace view CityToProvince as 
  select c.city_id, p.province_id from tblCity c
  join tblCounty co on co.county_id = c.county_id
  join tblProvince p on p.province_id = co.province_id;

创建后,您可以:

select province_id from CityToProvince where city_id = [whatever];