2010-02-17 5 views
0

J'essaie de 'marquer' plusieurs 'points' avec plusieurs tags. Je marque mes points uniques avec succès. Malheureusement, lorsque j'essaie d'utiliser une balise, comme 'test2' sur un autre point en tant que balise, cela me donne une erreur d'entrée en double si mon 'unique' est défini sur false ou si 'unique' est défini sur true, il va del mon tag pour tous les autres points pour 'test2' et en créer un nouveau.CakePHP - HABTM - ajouter plusieurs tags à plusieurs points

Voici ce que j'ai pour mes données post:

Array 
(
    [Tag] => Array 
     (
      [id] => 4b7af6d7-787c-4f10-aa49-2502c0a80001 
      [name] => Test2 
     ) 

    [Point] => Array 
     (
      [id] => 4b47c66f-a130-4d12-8ccd-60824051e4b0 
     ) 

) 

Dans mon modèle tag i ont ceci:

public $hasAndBelongsToMany = array(

'Point' => array(
     'className' => 'Point', 
     'joinTable' => 'points_tags', 
     'foreignKey' => 'tag_id', 
     'associationForeignKey' => 'point_id', 
     'unique' => false) 
); 

J'ai essayé avec l'ensemble 'unique' comme vrai aussi. Malheureusement, cela supprimera toutes les autres instances de 'Test2' dans la table de jointure ('points_tags').

J'ai essayé à l'aide à la fois économiser() et saveAll(). Les deux me donnent cette erreur:

Avertissement (512): erreur SQL: 1062: entrée en double '4b7af6d7-787c-4F10-aa49-2502c0a80001-4b47c66f-a130-4d12-8ccd-608' pour la touche 'MAN_ADD' [ CORE/cake/libs/model/datasources/dbo_source.php, ligne 527] Query: INSERT INTO points_tags (tag_id, point_id, id) VALUES ('4b7af6d7-787c-4F10-aa49-2502c0a80001', '4b47c66f-a130-4d12 -8ccd-60824051e4b0 ',' 4b7b39f3-46f8-4744-ac53-3973c0a80001 ')

Pensées ????

Suggestions ????

Répondre

0

Où le id vient? Je suppose que c'est une clé primaire de la table, et d'après ce que je comprends de votre message (écrivez plus clairement, aidez-nous à vous aider) le problème n'est pas avec des points ou des balises, mais avec l'ID dans la table points_tags.

+0

L'identifiant dont vous parlez est soit tag_id, soit point_id. tag_id est de la balise si elle existe déjà et point_id est l'identifiant de l'objet que j'essaye de taguer. Le problème dans mon esprit est que l'entrée points_tags est écrasée si une entrée est déjà présente dans un autre élément. Par exemple: point 'a' a une étiquette - test de si je veux aussi le point tag 'b' avec étiquette 'test', il supprimera l'entrée actuelle points_tags pour le point 'a' tag ' test 'et insérez une entrée pour le point' b 'avec l'étiquette' test '. Par conséquent supprimer toutes les associations précédentes faites avec «test». Est-ce que cela vous clarifie? – zmonteca

0

Lorsque vous utilisez la méthode de sauvegarde, faites-vous cela dans une boucle? Rappelez-vous, la meilleure pratique consiste à appeler model :: create() chaque fois que vous enregistrez dans une boucle.

Je trouve souvent que lorsque j'ai des problèmes avec le comportement d'épargne HABTM, c'est parce que je n'ai pas appelé modèle :: créer.

+0

Je suis en train de faire ça. Le problème est que mon enregistrement sélectionne d'abord tous mes tags_id de ma table de jointure, puis supprime tous ceux-là. Sinon, il devrait être tout sélectionner de ma table de jointure en fonction de mon tag_id et point_id. – zmonteca