Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [symfony] Problem z poleceniem Update
Nekro
post 26.10.2007, 21:02:44
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 3.01.2007
Skąd: Żory

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


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....


--------------------
Angielski dla specjalistów: www.anglobiznes.pl
Wydawnictwo językowe: www.eprofess.pl
Go to the top of the page
+Quote Post
pawel_k
post 26.10.2007, 22:34:20
Post #2





Grupa: Zarejestrowani
Postów: 211
Pomógł: 3
Dołączył: 29.07.2005
Skąd: Szczebrzeszyn

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


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ć

Ten post edytował pawel_k 26.10.2007, 22:38:33
Go to the top of the page
+Quote Post
Nekro
post 27.10.2007, 06:55:39
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 3.01.2007
Skąd: Żory

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


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


--------------------
Angielski dla specjalistów: www.anglobiznes.pl
Wydawnictwo językowe: www.eprofess.pl
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 11:18