Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]aktualizacja bazy
Forum PHP.pl > Forum > PHP > Frameworki
Papub
Witam. Piszę aplikacje w symfony. Chcę zaaktualizacować zawartość rekordu w bazie danych w tabeli kategorie. Dane do akcji przychodzą z js.

  1. if($request->isXmlHttpRequest()) {
  2.  
  3. $con = Propel::getConnection();
  4.  
  5. $c1 = new Criteria();
  6. $c1->add(KategoriePeer::ID_KATEGORI, $this->getUser()->getAttribute('idkat'));
  7. $c1->add(KategoriePeer::NAZWA, $this->getRequestParameter('tytul'));
  8. $c1->add(KategoriePeer::ID_RODZICA, $this->getRequestParameter('rodzic'));
  9.  
  10. if(KategoriePeer::doUpdate($c1, $con)) {
  11. $response['type'] = 'success';
  12. } else {
  13. $response['type'] = 'error';
  14. }
  15. $this->status = json_encode($response);
  16. }


(UPDATE kategorie SET nazwa="1", id_rodzica="1" WHERE id_kategori = "1")

Powyżej to kod akcjii którym to załatwiam. Wszystko działa poprawnie kiedy dane które są różne niż te w bazie. Jeżeli w tabeli jest 1, 1, 1 i robię update na 1,1,3 wtedy będzie success. A jeżeli w tabeli jest 1,1,1 i zmieniam na 1,1,1 wtedy jest error. Jak to załatwić. Przecież nie będę najpierw wyciagał z bazy danych porównywał na poziomie akcji tych danych z tym co chce zapisać i jeżeli są różne to dopiero wykonywać update. Coś robię źle?

Pozdrawiam
strife
Przenoszę na forum frameworki.

Masz jakieś logi? Tryb debugowania w symfony włączony? Treśc błędu masz?
Papub
raczkuje w tym temacie smile.gif
dopiero zaczynam używać symfony. Mam xampp + php + mysql i na tym symfony 1.4
nie mam zielonego pojęcia czy są jakieś logi od tego a jak są to w jakim katalgou. Nie zagłębiałem się jeszcze tak bardzo
strife
Z tego co pamiętam w Symfony masz możliwość włączenia tryb debugowania (http://stackoverflow.com/questions/5276415...vely-in-symfony). Taki fajny debug bar powinieneś mieć.

Potem firebug'iem możesz sobie tego request'a podejrzeć, może w tym trybie sf coś wywali.

I jeszcze filelogger można włączyć: http://stackoverflow.com/questions/8160352...ing-not-working
Papub
dzięki. Jutro obaczaje temat. Jak by co to usłyszenia smile.gif
Valantir
Aby włączyć taki debug bar dodaj "_dev" po nazwie aplikacji:
np frontend_dev.php lub backend_dev.php itp...
a w Firebugu po zainstalowaniu przejdź w zakładkę Sieć, a następnie XHR... Wszystko widać jak na dłoni...
Papub
No faktycznie. _dev. Ale nie uzyskałem nic satysfakcjującego. Może dlatego, że wszystko działa za pośrednicwem js. Najpierw waliduje dane z formularzy i wysyłam dane ajaxem do akcji. Czyli widze tylko co zwróciło mi js czyli {"type":"error"}
toffiak
Można skonfigurować symfony aby żadania ajaxowe zwracały panel debugowania, tylko że samemu trzeba go stworzyć i wysyłać z akcji. Dużo łatwiej i szybkiej można sprawdzic logi a dokładnie frontend_dev.log, na początku najlepiej go wyczyścić a potem przesłać żądanie ajaxowe i sprawdzić co zostało zapisane.

Przy wysyłaniu danych ajaxem url postaci: /artykul/wyswietl powinien zwierać prefix /frontend_dev.php/artykul/wyslij i tylko w środowisku deweloperskim w produkcyjnym należy go usunąć.
jaro87
Zobacz w dokumentacji co zwraca doUpdate() smile.gif
Papub
Nie doszukałem się w dokumentacji.
Zrobiłem coś takiego:
  1. $ret = KategoriePeer::doUpdate($c1, $con);
  2. $response['type'] = $ret;
  3. $this->status = json_encode($response);


i w firebugu sprawdziłem że gdy doda się prawidłowo zwraca {"type":1} a gdy ponownie dodam nie zmienione dane {"type":0}

w środowisku developerskim do góry w pasku nie zwraca żadnych błędów.

- a w sumie doczytałem, że podana liczba to liczba zmodyfikowanych wierszy. Wiec źle do tego podszedłem. W sumie chodzi mi nie o liczbe wierszy albo czy w ogóle coś zostało zmodyfikowane. Bardziej mi zależy na pozyskaniu informacji czy procedura updatu przebiegła prawidłowo. Czy podczas updatu nie nastąpił jakiś błąd. Żebym na partyzanta nie wyświetlił informacji użytkownikowi że dane zostały zaaktualizowane a tak na prawę okazałoby się że wystąpił błąd podczas updatu
Valantir
Pobierz dane, wykonaj na nich zmianę i zapisz metodą save. Jedynie taką metodę widzę bez konieczności nadpisywania klas itp. Wtedy możesz w warunku sprawdzić czy save się wykonał prawidłowo. Jeżeli ktoś widzi inne rozwiązanie to proszę bardzo...
Papub
A update nie ma takiego warunku? Bez sesnu to. Zaoszczędzę jedno zapytanie robiąc np. surowe zapytanie smile.gif
Valantir
No jeżeli tak, to wejdź do metody doUpdate a następnie doUpdate z klasy Base... Przeanalizuj te matody i sam zobaczysz
Papub
A inni też tak robią? Bo jeżeli to jest ogólnie przyjęta zasada to też w to wejde biggrin.gif nie będę z Twoją radą polemizował bo praktycznie nie wiem smile.gif jestem bardzo początkujący w symfony.
Valantir
Nie wiem czy inni też tak robią... Wiem jedno, że jeżeli chcesz mieć pewność, że aktualizacja została wykonana poprawnie, to możesz tak postąpić... wtedy będziesz miał pewność, że dane zaktualizowano prawidłowo sprawdzając co zwraca funkcja save(). Ewentualnie jakoś samemu napisać metodę, która podczas aktualizacji będzie sprawdzać ilość zaktualizowanych rekordów (mimo tego, że dane aktualizujące będą takie same jak dane przechowywane w bazie). Wtedy sprawdzisz czy ilość rekordów jest większa od 0 (dobrze zaktualizowane)... Jakoś nie mam pomysłu jak wykonać to przy użyciu Propela bez kombinowania z jednym zapytaniem... W grę wchodzi też możliwość "z palca" wpisania zapytania aktualizującego i sprawdzenie później czy zwróci jeden czy zero... Szkoda, że inni się nie wypowiedzą, bo prawdę powiedziawszy też jestem ciekaw czy jest możliwość załatwienia tego w taki sposób w jaki myślisz.
Papub
No właśnie nie doszukałem się w dokumentacji szczegółowego opisu funkcji doUpdate. Swoją drogą po co ktoś piszesz taką funkcję której nie da się sprawdzić pod kontem prawidłowego działania. W sumie dla mnie satysfakcjonuje mnie odpowiedź 0 i 1 zwracane przez doUpdate bo nie ma innej możliwości żeby 0 pokazywało co innego niż to że wprowadzane dane są takie same. Tylko jaka jest gwarancja że zawsze 1 będzie oznaczało że wszystko poszło ok itd. No ale dzięki bardzo za chęć pomocy. Może coś jeszcze w necie wyszperam. Pozdrawiam
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.