2009-10-20 7 views
0

Je suis un débutant avec CakePHP. J'ai deux tables: contacts et tags, et une table HABTM contacts_tags. L'utilisateur devrait être capable d'ajouter des tags comme les gens peuvent le faire sur delicious.com. ils obtiennent une liste de tags au fur et à mesure qu'ils tapent. Ils peuvent également ajouter de nouvelles balises simplement en les tapant. Je veux vérifier la table des étiquettes pour voir quelles étiquettes sont déjà présentes et lesquelles ne le sont pas. Les balises qui sont nouvelles doivent être ajoutées à la table et les identifiants d'insertion sont ajoutés à un tableau. Ensuite, je veux utiliser ces identifiants de balises pour mettre à jour la table contacts_tags. C'est tout. Ce sont les deux fonctions que j'ai créé:Comment mettre à jour un jointable dans CakePHP, manuellement

/** 
this function checks for existing tags and creates new tags 
@params string (of comma separated tags) 
@return array (of IDs) 
**/ 
function saveAndCreateTags($tags){ 
    $tags = explode(",", $tags); //create array of tags 
    $idArray = array(); 
    foreach($tags as $tag) { 
     $count = $this->find('count', array('conditions' => array('name' => $tag))); 
     if($count === 0) { 
      $this->create(); 
      if($this->save($tag)) { 
      $idArray[] = $this->getInsertID(); 
      } 
     } 
     else { 
      $idArray[] = $this->getID(); 
     } 
    } 
    return $idArray; 
} 

/** 
this function updates the relational table 
@params array (this array is returned by saveAndCreateTags function 
@params int (id of the contact) 
**/ 
function updateContactTagsTable($idArray, $contactId){ 
    foreach($idArray as $tagId) { 
     $count = $this->ContactTag->hasAny(array('tag_id' => $tagId, 'contact_id' => $contactId)); 
     if($count === 0) { 
      (); 
      $this->ContactTag->save(array('contact_id' => $contactId, 'tag_id' => $tagId)); 
     } 
    }  
} 

Aucune de $ this-> ContactTag-> Hasany, $ this-> ContactTag-> créer, $ this-> ContactTag-> Enregistrer travaille ... Am J'ai raté quelque chose?

+0

Désolé, ne pouvait pas tout à fait obtenir une poignée sur l'endroit où le problème est, exactement. Si vous essayez d'enregistrer des données de modèle associées, vous pouvez utiliser la méthode Model :: saveAll() plutôt que Model :: save(). –

Répondre

Questions connexes