2012-04-09 6 views
0

J'ai créé une application CakePHP qui permet à un utilisateur de créer des publications et d'y ajouter des tags (rubriques). La structure de la base de données et des associations peut être vue ici: Setting up contains for a join table in CakePHPEnregistrement des données de modèle associées qui doivent être uniques

J'ai réussi à extraire les données en utilisant Contain via la table de jointure. Mais maintenant j'essaye de construire la partie où un utilisateur entre un sujet et puis l'enregistre BOTH dans la table de sujet et la table de Topic_post.

Je le code suivant mon ajouter une nouvelle méthode post:

if ($this->request->is('post')) 
     { 
      //$this->Post->create(); 

      if ($this->Post->save($this->request->data)) 
      { 
       // Save extra data 
       $this->Post->saveField('user_id', $this->Auth->user('id')); 
       $this->Post->saveField('datetime', date('Y-m-d H:i:s')); 
       $this->Post->saveField('modified', date('Y-m-d H:i:s')); 
       $this->Post->saveField('status', 1); 

       // Build slug 
       $post_title = Sanitize::html($this->request->data['Post']['title'], array('remove'=>true, 'quotes' => ENT_NOQUOTES)); 
       $post_title = String::truncate($post_title, 50, array('exact'=>false,'html'=>false,'ending'=>'')); 
       $this->Post->saveField('slug', Inflector::slug($post_title)); 

       // Redirect the user to the newly created post (pass the slug for performance) 
       $this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($this->Post->id),'slug'=>$this->Post->slug)); 
      } 
      else 
      { 
       $this->Session->setFlash('Server broke!'); 
      } 
     } 

Alors ce que je dois faire maintenant enregistrer les données de sujet connexe qui est tapé ici dans la vue:

<?php echo $this->Form->create(); ?> 

<?php echo $this->Form->input('Post.title'); ?> 

<?php echo $this->Form->input('Post.content', array('type'=>'textarea','label'=>false)); ?> 

<?php echo $this->Form->input('Topic.title', array('type'=>'textarea','label'=>'Topics')); ?> 

<button type="submit" class="orangeButton small">Create</button> 

<?php echo $this->Form->end(); ?> 

J'ai regardé les docs CakePHP et il semble que quelque chose comme saveAll est ce dont j'ai besoin? Mais je suis confus car je ne suis pas sûr à 100% comment l'utiliser aussi il est important de noter qu'un utilisateur peut enregistrer plus d'un sujet dans la base de données et les sujets eux-mêmes sont tous uniques, par exemple vous ne pouvez pas créer un sujet qui existe déjà, il utilisera simplement l'identifiant existant pour l'éditeur de liens.

Quelqu'un peut-il aider? Comme je pense que c'est assez complexe ...

+0

Des mises à jour? Merci – Cameron

Répondre

2

Vous pouvez faire quelque chose comme:


$this->Post->saveAll($this->data, array('validate'=>'first')); 

L'utilisation du tableau ('validate' => 'first'); s'assure que nos deux modèles sont validés avant d'être sauvegardés. Vouliez-vous dire quelque chose comme ça.

Espérons que cela aide

+0

Je ne suis pas entièrement sûr. Je veux dire, est-ce que CakePHP gère simplement tous les liens et sait quelle table placer? c'est à dire. mettre à jour la table Post, la table Topic et la table de jointure Topic_Posts? – Cameron

+1

cakePHP le gérera, si vous avez des relations maintenues, comme Topic belongsTo Post, etc –

+0

Qu'en est-il des balises séparées par des virgules? Comment le gâteau sait-il créer une rangée pour chacun et un lien pour chacun? – Cameron

Questions connexes