Ассоциации CakePHP портятся - PullRequest
0 голосов
/ 09 августа 2010

Я новичок в CakePHP и работаю с книгой Apress «Начиная CakePHP от новичка до профессионала», но столкнулся с проблемой после главы о выпечке.

(Если вы видели мою другую недавнюювопрос, вы будете знать, что мне пришлось пропустить эту главу, потому что я не могу заставить консоль bake работать на моем компьютере с win7).

Проблема в том, что я не думаю, что ассоциации таблиц работают должным образом,несмотря на то, что они использовали, когда я запускал пример приложения блога в начале книги.

Пример блога имеет следующие таблицы:

Users
Posts

Модель пользователя: $ hasMany = array('Сообщение');Модель Post: $ ownTo = array ('User');

В настоящее время я использую скаффолд только для того, чтобы протестировать все, но у меня есть несколько пользовательских представлений и пользовательское действие add () для posts_controller.

Проблема в том, что когда я использую действие add () для posts_controller, поле id для пользователя (из таблицы Users) не помещается в поле внешнего ключа user_id таблицы Posts.Поэтому, когда я отображаю сообщение, часть представления «автор» остается пустой, поскольку идентификатор не может быть найден.Если я использую debug($posts), то возвращаемый массив не содержит никакой информации для user_id каждого поста и, следовательно, никакой информации в массиве 'User'.

Я думал, что user_id был обычным способом добавления ассоциации междустолы для cakePHP, но, похоже, он не работает.

Есть идеи, что мне нужно сделать?

Заранее большое спасибо,

Infiniti Fizz

PS Извините всех, если я перегружаю вас проблемами с CakePHP.

PPS

Почти забыл, мое представление add.ctp для сообщений выглядит следующим образом:

<div class="posts form">
 <?=$form->create('Post');?>
 <fieldset>
 <legend>Add Post</legend>
 <?
  e($form->input('name'));
  e($form->input('date'));
  e($form->input('content'));
  e($form->input('User'));
 ?>
 </fieldset>
 <?=$form->end('Submit');?>
</div>
<div class="actions">
 <ul>
  <li><?=$html->link(__('List Posts', true),array('action'=>'index'));?></li>
  <li><?=$html->link(__('List Users', true),array('controller','users', 'action'=>'index'));?></li>
  <li><?=$html->link(__('New User', true),array('controller'=>'users', 'action'=>'add'));?></li>
 </ul>
</div>

И действие add () в posts_controller.php:

function add()
{
   if(!empty($this->data))
   {
    $this->Post->create();
    if($this->Post->save($this->data))
    {
     $this->Session->setFlash('The Post has been saved', true);
     $this->redirect(array('action' => 'index'));
    }
    else
    {
     $this->Session->setFlash('The Post could not be saved. Please try again.', true);
    }
   }
   $users = $this->Post->User->find('list');
   $this->set(compact('users'));
}

1 Ответ

1 голос
/ 10 августа 2010

Я также новичок в торте, но, насколько я знаю, я думаю, вы должны изменить это в add.ctp:

$form->input('User')

к этому

$form->input('user_id')

Помощник по формам заботится о том, чтобы отображать входные данные в виде раскрывающегося списка (на основе ссылок hasMany-ownTo).

...