2010-06-16 5 views
1

J'essaie d'utiliser la requête de mise à jour la plus simple, mais Doctrine émet une instruction INSERT au lieu d'une UPDATE.Doctrine insère quand il faut mettre à jour

$q = Doctrine_Query::create() 
     ->from('Image i') 
     ->where('id = ?'); 

    $image = $q->fetchOne($articleId, Doctrine_Core::HYDRATE_RECORD); 
    $image->copyright = "some text"; 
    $image->save(); 

J'ai également essayé d'utiliser l'exemple du manuel, mais encore un nouveau record s'inséré:

$userTable = Doctrine_Core::getTable('User'); 

$user = $userTable->find(2); 

if ($user !== false) { 
    $user->username = 'Jack Daniels'; 
    $user->save(); 
} 

modifier:

Cet exemple des travaux manuels:

$user = new User(); 
$user->assignIdentifier(1); 
$user->username = 'jwage'; 
$user->save(); 

La chose amusante est que j'utilise thi s sur un autre modèle et là ça marche bien. Peut-être que je dois aller chercher tout le graphe du tableau pour que cela fonctionne (j'ai un autre modèle dans une relation un à plusieurs)?

Répondre

1

Ne pas, je le répète NE PAS utiliser méthode __construct() dans vos modèles. Si vous lisez attentivement le manuel, vous verrez que vous devez utiliser la méthode construct() (sans "__" devant). La plupart des choses fonctionneront en utilisant "__construct()" et en appelant parent :: __ construct() à l'intérieur mais l'état des enregistrements n'en est pas un et cela causera toutes sortes de problèmes sur la route, l'un d'eux est expliqué ci-dessus :)

suppose que nous devrons attendre Doctrine 2.0 :)

+0

Je ne connais pas la doctrine 1, mais dans la doctrine 2, il n'y a pas de problèmes. – tomazahlin

+0

Cette réponse a été écrite il y a plus de 7 ans :) –

0

J'ai eu une confusion similaire avec Doctrine. N'avait pas l'énergie à suivre, juste fini en utilisant la syntaxe de mise à jour DQL.

->update('User u') 
->set('u.username', '?', 'Jack Daniels') 
->where(....) 
1

La méthode replace() fonctionne pour moi. Utilisation du constructeur dans les modèles et les entités in fine

0
$q = Doctrine_Query::create() 
->from('Image') 
->where('id = ?' $id) 
->fetchOne(); 

$q->copyright = "some text"; 
$q->save(); 

This should work. 
Questions connexes