Категории Посмотреть в CakePHP - PullRequest
0 голосов
/ 12 апреля 2010

Следуя вводному уроку cakephp по созданию блога, я создал базу данных для просмотра, добавления / редактирования / удаления предприятий. С каждым бизнесом связан штат или провинция, и мне интересно, как я собираюсь создать страницу со списком всех штатов, например / states, и страницу будет похожа на / states / california и перечислять все компании калифорния.

Прямо сейчас у меня есть только одна страница, на которой перечислены все компании. Хотите знать, как я буду проектировать модель / контроллер / представление и маршруты для этого? Не могу найти источник в Интернете, который подробно описывает это, или я просто не знаю, как выглядеть.

1 Ответ

0 голосов
/ 12 апреля 2010

Поскольку вы новичок в торте, я думаю, что не стоит начинать с отношений HABTM , которые вам нужны в вашем вопросе, а также с самых сложных. Итак, я полагаю, что ваши модели отношений как проще: hasMany . Например, следующим образом:

/*this is  your state model
 *state table in database should like:id,name
 *and business table in database:id,name,state_id
 */
class State extends AppModel
{
    var $name = 'State';
    var $hasMany = array(
        'Business'=>array(
                'className'=>'Business',
                'foreignKey'=>'state_id',
                )
);   //this means a State can hasMany Businesses while a Business only belongs to one State

}

Затем выполните действие в контроллере состояния следующим образом:

 /*in your state controller*/
 function showBusinessesByState($statename)
 {
     if($statename && $thestate = $this->State->findByName($statename))
     {
         $this->set('state',$thestate);//debug $thestate you'll find data you need
     }
     else
     {
         $this->Session->setFlash("something wrong happens!");
     }
 }

Теперь я думаю, что вы можете обработать файл представления самостоятельно с помощью переменной $state для извлечения данных $thestate, которая также содержит список предприятий.

Теперь в /app/config/routes.php выполните часть маршрутизации:

Router::connect('/states/*',array('controller'=>'states','action' => 'showBusinessesByState'));

После финиша вы можете получить то, что вам нужно, с помощью /states/somestate. Когда вы пройдете через это, вы можете попытаться решить эту проблему наилучшим образом - hasAndBelongsToMany .

...