Ассоциации CakePhP во внимание
-
27-09-2019 - |
Вопрос
Я новичок в 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).