Question

Je suis nouveau dans CakePHP et j'ai travaillé à travers le livre Apress "Début CakePHP du novice au professionnel", mais j'ai rencontré un problème après le chapitre de la cuisson.

(Si vous avez vu mon autre question récente, vous saurez que j'ai dû sauter ce chapitre parce que je ne peux pas faire fonctionner la console de cuisson sur ma machine Win7).

Le problème est que je ne pense pas que les associations de table fonctionnent correctement, même si elles le faisaient lorsque j'ai commencé l'exemple de l'application de blog au début du livre.

L'exemple de blog a les tables suivantes:

Users
Posts

Le modèle utilisateur: $ hasmany = array ('post'); Le modèle de poste: $ appartenait = array ('utilisateur');

J'utilise actuellement l'échafaudage juste pour tout tester mais j'ai quelques vues personnalisées et une action ADD () personnalisée pour le Posts_Controller.

Le problème est que lorsque j'utilise l'action ADD () pour le Posts_Controller, le champ ID pour l'utilisateur (à partir de la table des utilisateurs) n'est pas placé dans le champ de clé étrangère user_id de la table Post. Par conséquent, lorsque j'affiche le message, la partie "auteur" de la vue est vide car l'ID ne peut être trouvé. Si j'utilise debug($posts) Ensuite, le tableau renvoyé n'a aucune information pour user_id de chaque message et donc aucune information dans le tableau «utilisateur».

Je pensais que user_id était le moyen conventionnel d'ajouter une association entre les tables pour CakePHP, mais cela ne semble pas fonctionner.

Des idées ce que je dois faire?

Merci beaucoup d'avance,

Infiniti fizz

PS Désolé tout le monde si je vous écrase avec des problèmes de gâteau.

PPS

Presque oublié, ma vue add.ctp pour les messages est comme suit:

<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>

Et l'action Add () dans 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'));
}
Était-ce utile?

La solution

Je suis également nouveau dans le gâteau mais pour autant que je sache, je pense que vous devriez changer cela dans Add.CTP:

$form->input('User')

pour ça

$form->input('user_id')

Le Formhelper prend soin d'afficher l'entrée en tant que liste déroulante (basée sur les références Hasmany-Belongsto).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top