Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony]aktualizacja bazy
Papub
post 9.02.2012, 22:38:37
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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
Powód edycji: [strife]: Dodanie tagu
Go to the top of the page
+Quote Post
strife
post 9.02.2012, 22:59:10
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Przenoszę na forum frameworki.

Masz jakieś logi? Tryb debugowania w symfony włączony? Treśc błędu masz?


--------------------
Go to the top of the page
+Quote Post
Papub
post 9.02.2012, 23:05:05
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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
Go to the top of the page
+Quote Post
strife
post 9.02.2012, 23:09:32
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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


--------------------
Go to the top of the page
+Quote Post
Papub
post 9.02.2012, 23:14:53
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


dzięki. Jutro obaczaje temat. Jak by co to usłyszenia smile.gif
Go to the top of the page
+Quote Post
Valantir
post 9.02.2012, 23:31:21
Post #6





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

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


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


--------------------
Pomogłem? Kliknij "Pomógł".
Go to the top of the page
+Quote Post
Papub
post 10.02.2012, 00:24:24
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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"}

Ten post edytował Papub 10.02.2012, 00:30:24
Go to the top of the page
+Quote Post
toffiak
post 10.02.2012, 08:26:47
Post #8





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

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


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


--------------------
Go to the top of the page
+Quote Post
jaro87
post 10.02.2012, 08:28:30
Post #9





Grupa: Zarejestrowani
Postów: 53
Pomógł: 7
Dołączył: 10.03.2011
Skąd: Wrocław

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


Zobacz w dokumentacji co zwraca doUpdate() smile.gif
Go to the top of the page
+Quote Post
Papub
post 10.02.2012, 12:56:48
Post #10





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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

Ten post edytował Papub 10.02.2012, 13:15:01
Go to the top of the page
+Quote Post
Valantir
post 10.02.2012, 18:10:22
Post #11





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

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


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


--------------------
Pomogłem? Kliknij "Pomógł".
Go to the top of the page
+Quote Post
Papub
post 10.02.2012, 22:37:07
Post #12





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


A update nie ma takiego warunku? Bez sesnu to. Zaoszczędzę jedno zapytanie robiąc np. surowe zapytanie smile.gif

Ten post edytował Papub 10.02.2012, 22:39:10
Go to the top of the page
+Quote Post
Valantir
post 10.02.2012, 23:13:49
Post #13





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

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


No jeżeli tak, to wejdź do metody doUpdate a następnie doUpdate z klasy Base... Przeanalizuj te matody i sam zobaczysz


--------------------
Pomogłem? Kliknij "Pomógł".
Go to the top of the page
+Quote Post
Papub
post 11.02.2012, 22:06:58
Post #14





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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.
Go to the top of the page
+Quote Post
Valantir
post 12.02.2012, 15:12:53
Post #15





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

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


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.


--------------------
Pomogłem? Kliknij "Pomógł".
Go to the top of the page
+Quote Post
Papub
post 12.02.2012, 21:19:39
Post #16





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 17.02.2006

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


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
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: 13.06.2025 - 08:24