Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] Problem z poleceniem Update
Forum PHP.pl > Forum > PHP > Frameworki
Nekro
Hejka,

Używam syfony i napotkałem mały problem przy tworzeniu zapytania udpdate.
Chcialem stworzyc następującego sql za pomoca Criteria()

UPDATE jakastabela SET kolumna = jakastabela.kolumna+700 where <warunek>;

Krótko mówiąc zwiększyć wartości w kolumnie "kolumna" o 700 w każdym wierszu tabeli spelniajacym jakis warunek

Jak zmiwnic ten fragment kodu
CODE

...
$c = new Criteria();
$c->add(TABELA::KOLUMNA,$wartosc);
$selectCriteria = new Criteria();
$selectCriteria->add(TABELA::KOLUMNA,$test,Criteria::GREATER_EQUAL);
BasePeer::doUpdate($selectCriteria, $c,Propel::getConnection(self::DATABASE_NAME));
.....


Z góry dzięki....
pawel_k
http://trac.symfony-project.com/ticket/1718
http://propel.phpdb.org/trac/ticket/415

niestety tego nie przejdziesz (chyba że ja nie wiem jak to można zrobić). generalnie możesz robić własne warunki dla warunków WHERE ale przy SET kolumna = jakastabela.kolumna+700 raczej nie da się tego zrobić (a już na pewno nie z polami liczbowymi) i trzeba skorzystać z creole.

ps. wiem że to nie odpowiedź na Twoje pytanie ale od razu pokaże przykładowy kod z Criteria::CUSTOM
  1. <?php
  2. $objCrit1 = new Criteria();
  3. $objCrit1->add( UserPeer::EMAIL, 'char_length('.UserPeer::EMAIL.') = 21', Criteria::CUSTOM );
  4.  
  5. $objCrit2 = new Criteria();
  6. $objCrit2->add( UserPeer::EMAIL, 'nowa@wartosc.pl' );
  7.  
  8. BasePeer::doUpdate( $objCrit1, $objCrit2, Propel::getConnection() );
  9. ?>

wygeneruje zapytanie
  1. UPDATE users SET EMAIL = 'nowa@wartosc.pl' WHERE char_length(users.EMAIL) = 21


z prolepa 1.2 więcej wydusić się nie da, propel 2.0 ma to dopiero odmienić
Nekro
Heja.
Dzieki za odpowiedz. Próbowałem na różny sposób i jedyne wyjście, które mi się nasunęło to stworzenie całego zapytania SQL bez Criteria().

  1. <?php
  2. $sql = "UPDATE ".TABELA::::TABLE_NAME." SET wartosc = (wartosc + ?) WHERE wartosc >= ?";
  3. $stmt = $con->PrepareStatement($sql);
  4. $stmt->setInt(1, $cos);
  5. $stmt->setInt(2, $cos2);
  6. ?>


W takim razie nic tylko czekac na propel 2.0 smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.