2009-08-03 9 views
1

En propel, il y a cette fonction doUpdate, qui renverra le nombre de lignes affectées par cette requête.Propel: définition des "lignes affectées" retournées depuis doUpdate

La question est, s'il n'y a pas besoin de mettre à jour la ligne (parce que la valeur set est déjà la même que la valeur du champ), ces lignes seront-elles comptées comme la ligne affectée?

Prenez par exemple, je le tableau suivant:

ID | Name | Books 
1 | S1oon | Me 
2 | S1oon | Me 

Supposons que j'écrire une fonction ORM de l'équivalent de la requête suivante:

update `new table` set 
Books='Me' 
where Name='S1oon'; 

Quel sera le retour des résultats doUpdate ? Va-t-il renvoyer 0 (parce que toutes les colonnes Books sont déjà Me, donc il n'y a pas besoin de mettre à jour), ou sera-ce 2 (car il y a 2 lignes remplissant la condition where)?

Répondre

0

Il retournera 2.

2

Sous le capot, Propel utilise PDOStatement de PDO :: rowCount() méthode pour renvoyer le nombre de lignes affectées. Donc, la réponse courte est que vous obtiendrez "2" comme vous l'attendez ici, mais la réponse la plus longue est que cela peut dépendre légèrement de la façon dont PDO implémente cette fonction pour votre base de données spécifique. (Je pense que si vous n'obteniez pas 2, cela devrait être un bug pour PDO, cependant.)

Voir the description of rowCount() in the PHP manual pour plus d'informations.

Une autre chose à garder à l'esprit est que lorsque Propel appelle des méthodes (comme save() ou supprimer()) qui devraient revenir modifiés de nombre de lignes et ce qui peut entraîner plus une ligne étant modifiée (par exemple, si vous ajoutez un livre et son auteur et que les deux sont INSÉRÉS en appelant book-> save()), vous obtiendrez le total nombre de lignes modifiées.

Questions connexes