2010-08-12 5 views
0

J'ai une table de produit avec un champ pour stocker le prix. Chaque fois, ce prix changeait, j'ai besoin de garder l'ancienne valeur. J'ai donc créé une table appelée Historique pour stocker l'identifiant du produit, le prix et la date de changement. J'ai aussi créé cette méthode dans ma classe de produit pour générer une nouvelle entrée:Enregistrer une entrée dans une table et une entrée liée dans une autre en même temps?

public function updateHistory($modified) {  
    if(array_key_exists('price', $modified)) { 
     $history = new History() 
     $history = new History();$ 
     $history->setProductId($this->getId()); 
     $history->setPrice($modified['price']); 
     $history->save() 
    } 
} 

J'appelle cette méthode de la méthode preSave()

public function preSave($event) { 
    $modified = $this->getModified(); 
    $this->updateHistory($modified); 
} 

Il fonctionne très bien pour le produit édité mais pas du tout pour un nouveau produit car il n'a pas d'identifiant pour le moment (l'identifiant du produit est null dans la table de l'historique) et si j'utilise la méthode updateHistory dans la méthode postSave, $ modified est null;

Alors, comment puis-je créer ma première entrée dans la table d'historique pour un nouveau produit?

Merci à tous pour votre réponse et le temps qui passe pour m'aider!

(Désolé pour mon anglais)

Répondre

0

si vous voulez garder facilement la trace de l'histoire d'un produit, vous pouvez utiliser le comportement « Versionable » dans votre fichier schema.yml. Ceci, vous aurez une histoire avec très peu de codage impliqué.

Questions connexes