Associações de Cakephp bagunçando
-
27-09-2019 - |
Pergunta
Sou novo no CakePhp e tenho trabalhado no livro Apress "Iniciando CakePhp de iniciantes a profissionais", mas tenha um problema após o capítulo do cozimento.
(Se você viu minha outra pergunta recente, saberá que eu tinha que pular esse capítulo porque não consigo fazer o console do Bake trabalhando na minha máquina Win7).
O problema é que não acho que as associações de mesa estejam mais funcionando corretamente, mesmo que costumavam quando eu iniciei o exemplo do aplicativo no blog no início do livro.
O exemplo do blog tem as seguintes tabelas:
Users
Posts
O modelo do usuário: $ hasmany = array ('post'); O modelo de postagem: $ pertencente = Array ('usuário');
Atualmente, estou usando o andaime apenas para testar tudo, mas tenho algumas visualizações personalizadas e uma ação add () add () para o Post_controller.
O problema é que, quando uso a ação add () para o pós -conclusão, o campo ID do usuário (da tabela de usuários) não é colocado no campo User_Id Foreign Key da tabela de postagens. Portanto, quando exibo a postagem, a parte do "autor" da visualização está em branco porque o ID não pode ser encontrado. Se eu usar debug($posts)
Em seguida, a matriz retornou não possui nenhuma informação para user_id de cada postagem e, portanto, nenhuma informação na matriz 'usuário'.
Eu pensei que o user_id era a maneira convencional de adicionar uma associação entre tabelas para CakePhp, mas parece não estar funcionando.
Alguma idéia do que eu preciso fazer?
Muito obrigado antecipadamente,
Infiniti Fizz
PS Desculpe a todos se estou sobrecarregando você com problemas de CakePhp.
PPS
Quase esqueci, minha visualização add.ctp para postagens parece a seguir:
<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>
E a ação add () em 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'));
}
Solução
Eu também sou novo no bolo, mas até onde eu sei, acho que você deveria mudar isso em add.ctp:
$form->input('User')
para isso
$form->input('user_id')
O FormHelper cuida de exibir a entrada como suspensão (com base nas referências Hasmany-Belongsto).