Вопрос

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

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

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

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

Users
Posts

Модель пользователя: $ hasmany = массив ('post'); Модель Post: $ Sacesto = Array («Пользователь»);

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

Проблема в том, что когда я использую действие Add () для Post_Controller, поле ID для пользователя (из таблицы пользователей) не помещается в поле внешнего ключа user_id в таблице сообщений. Следовательно, когда я покажу пост, «автор» часть представления пустота, потому что идентификатор не может быть найден. Если я использую debug($posts) Затем возвращаемый Array не имеет никакой информации для user_id каждого поста и, следовательно, нет информации в массиве пользователя.

Я думал, что 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 () в сообщениях_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'));
}
Это было полезно?

Решение

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

$form->input('User')

к этому

$form->input('user_id')

Формоверщик заботится о том, чтобы отобразить вход в виде раскрывающегося списка (на основе ссылок HASMANY-COCESTO).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top