Список городов не в базе данных в CakePHP - PullRequest
0 голосов
/ 18 августа 2010

У меня есть приложение в CakePHP, в котором перечислены предприятия. У меня есть бизнес-модель / контроллер, а также модель / контроллер state_list. Однако я хочу быть более подробным, поэтому, когда пользователь нажимает на страницу состояния, он перечисляет все города в этом конкретном штате, в которых перечислены предприятия. Затем, когда они нажимают на определенный город, он показывает страницу со списком всех предприятий в этом конкретном городе.

Как бы я мог сделать это без таблицы базы данных со списком всех городов?

1 Ответ

2 голосов
/ 18 августа 2010

Для этой цели лучшая структура базы данных будет выглядеть примерно так:

Table: Location
id
parent_id
name
type

Table: Business
id
location_id
...

Ваши города и штаты должны образовать дерево :

America
   California
      San Francisco
   New York
      ...
Japan
   Tokyo
      ...

Например:

Business ( ..., location_id => 5, ... )
Location ( id => 5, parent_id => 2, name => San Francisco, type => city )
Location ( id => 2, parent_id => ..., name => California, type => state )

Таким образом, каждый бизнес принадлежит городу, а также государству и стране, и все имеет хороший идентификатор. Вы также не можете ошибиться, имея бизнес в Нью-Йорке, Калифорнии, Японии (что в настоящее время возможно).

Учитывая то, что у вас есть, вы можете фильтровать города только через поиск по имени:

$listOfBusinessesInState = $this->Business->find('all', array(
    'conditions' => array('Business.state_id' => $state_id),
    'fields'     => array('Business.city'),
    'group'      => array('Business.city')
));
$listOfCitiesInState = Set::extract('/Business/city', $listOfBusinessesInState);
...