2010-08-09 2 views
0

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

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

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

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

Users 
Posts 

Модель пользователя: $ hasMany = массив ('Post'); Модель Post: $ belongsTo = array ('Пользователь');

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

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

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

Любые идеи, что мне нужно делать?

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

Infiniti Fizz

P.S. Извините, если я подавляю вас с проблемами 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> 

и действие дополнения() в 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

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

$form->input('User') 

к этому

$form->input('user_id') 

The FormHelper заботится, чтобы отобразить входные данные в виде выпадающего списка (на основе ссылок hasMany-belongsTo).

+0

Ах, это сработало, спасибо, я просто предположил, что это приведет к выпадению значений user_id, таких как 1,2,3 и т. Д., Но да, что сработало. Ну вот первая ошибка в той книге, которую я/вы нашли, лучше обведите кружком :) –