2010-11-11 10 views
0

J'utilise CakePHP 1.3 avec MySQL et exécuter dans une boucle serrée avec le code comme:Le modèle CakePHP save() n'est pas complet dans le temps?

if ($this->Model->find('count', array('conditions' => array('Model.name' => 'name'))) == 0) 
{ 
    $this->Model->create(); 
    $this->Model->save(array('Model' => array('name' => 'name'))); 
} 

$data = $this->Model->find('first', array('conditions' => array('Model.name' => 'name'))); 

Cependant, parfois $ data sort pour être NULL; en d'autres termes, l'enregistrement n'existe pas même si je crée/enregistre un nouvel enregistrement s'il n'existe pas pour commencer.

Y a-t-il un délai entre le moment où l'enregistrement est créé et celui où il est disponible?

Toute aide est grandement appréciée.

EDIT 1 Je dois préciser que je m'assure que l'appel à Model-> save() réussit avant de continuer.

if (!$this->Model->save(array('Model' => array('name' => 'name')))) 
    $this->error('Save failed'); 

Merci.

+0

TopQ, s'il vous plaît poster l'extrait de code complet. Si vous incluez la première et la deuxième partie, vous pouvez enregistrer deux fois le même enregistrement, comme *! $ This-> Model-> save (... * n'est pas simplement une simple vérification.) – benjamin

+0

TopQ, j'ai ajouté edit 2. – benjamin

+0

Pourrait être quelque chose lié à la connexion persistante.Est-ce que vous l'employez? – riotera

Répondre

0

Je ne pense pas, au niveau MySQL à chaque fois que l'insertion est terminée, l'enregistrement nouvellement créé peut être utilisé instantanément. J'utilise MySQL depuis des années et je n'ai jamais eu ce problème. Pour autant que je sache, les commandes sont ajoutées à une file d'attente et sont exécutées dans un système FIFO (First In First Out) par défaut.

+0

J'avais l'habitude d'écrire des requêtes SQL directement et de les exécuter et jamais couru dans ce genre de problèmes non plus Doit être Cake ... – TopQ

0

Vous pouvez toujours réécrire votre code un peu:

if ($this->Model->find('count', array('conditions' => array('Model.name' => 'name'))) == 0) 
    { 
    $this->Model->create(); 
    if ($this->Model->save(array('Model' => array('name' => 'name')))) 
    { 
    $data = $this->Model->find('first', array('conditions' => array('Model.name' => 'name'))); 
    /* or better: */ 
    $data = $this->Model->findByName('name'); 
    /* or rather use: */ 
    $data = $this->Model->find('first', array('conditions' => array('Model.id' => $this->Model->id))); 
    /* or even better, try this: */ 
    $data = $this->Model->read(); 
    } 
    } 
+0

Merci pour la réponse. Si la sauvegarde réussit ou pas Voir mon article original mis à jour Merci – TopQ

+0

Essayez '$ data = $ this-> Model-> read();', il devrait récupérer le dernier enregistrement inséré – PawelMysior

0

Peut-être que vous avez des règles de validation qui empêchent d'enregistrer, essayer

if (!$this->Model->save(array('Model' => array('name' => 'name')))) { 
    pr($this->Model->validationErrors); 
} 

si le pr() montre quelque chose, vous trouverez le numéro

+0

Merci pour la réponse. vérifier si la sauvegarde réussit ou non Voir mon article original mis à jour Merci. – TopQ

Questions connexes