Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF]Propel i save(), Po wykonaniu save() w ramach aktualizacji rekordu zwraca 0
kkamis
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 24.03.2011

Ostrzeżenie: (0%)
-----


Witam,

Być może podobny wątek istnieje już na forum - ja niestety nic takiego nie znalazłem...

Problem polega na tym, że przekazuje do akcji dane z formularza. Na ich podstawie mają zostać utworzone nowe rekordy w bazie danych jak i zaktualizowane już istniejące. O ile przy zapisie nowych rekordów funkcja propela save() zwraca liczbę 1 tak przy aktualizacji zwracane jest 0 choć sama aktualizacja następuje prawidłowo. Z tego co wyczytałem to funkcja ta zwraca liczbę "przetworzonych?" wierszy (być może źle zrozumiałem). Wydaje mi się, że w kodzie jest wszystko w porządku, ale mogę się oczywiście mylić...

Oto kod:

  1. foreach($_POST['obj'] as $obj) {
  2. if($obj['id']) {
  3. $update_obj = ObjPeer::retrieveByPK($obj['id']);
  4. } else {
  5. $update_obj = new Obj();
  6. }
  7. $update_obj->setValue($obj['value']);
  8. if(!$update_obj->save()) $success = false;
  9. }


Z góry dziękuję za wszelką pomoc i pozdrawiam (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
arecki
post
Post #2





Grupa: Zarejestrowani
Postów: 222
Pomógł: 35
Dołączył: 6.02.2005

Ostrzeżenie: (0%)
-----


Wczoraj na szybko odpisałem ale niestety nie do końca zgodnie z zadanym pytaniem tak więc dzisiaj jeszcze raz podszedłem do tematu i sprawdziłem w kodzie symfony, a właściwie to propela, jest.
Mianowicie doszedłem do metody public static function doUpdate(parametry...) w pliku sfPropelPlugin/lib/vendor/propel/util/BasePeer.php i z tego co mi się wydaje to affectet rows, czyli to co Ciebie interesuje zwracane jest z obiektu PDO. A z manuala wnioskować można że jest to zależne od rodzaju bazy i nie za bardzo można na tym polegać co oczywiście cytuje:
Cytat
PDOStatement::rowCount() returns the number of rows affected by the last DELETE, INSERT, or UPDATE statement executed by the corresponding PDOStatement object.

If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 01:36