Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] dynamiczne pobieranie danych i zapis
AxZx
post 9.10.2008, 21:32:18
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


witam

taki dziwny problem mam, nie wiem czy sam go stworzyłem czy po prostu nie da się tego tak łatwo zrobić.

mam 6 różnych formularzy, 6 różnych modeli czyli 6 różnych tabel w bazie.
w kontrolerze chciałbym to w jednym miejscu zapisywać, ale tak, żebym nie musiał tam podawać, które dane zapisuje. po prostu wszystkie dane muszą być zapisane.
problem w tym, że w formularzu mam checkboxa, który ma wartość 0 lub 1.

dane zapisuje w ten sposób:
  1. <?php
  2. $dane->fromArray($this->getRequest()->getParameterHolder()->getAll(), BasePeer::TYPE_FIELDNAME);
  3. $dane->save();
  4. ?>


problem w tym, że gdy ten checkbox jest odznaczony (ma wartość 0) to nie występuje on w tabeli z parametrami - w bazie nie są zapisywane dane, że ktoś odhaczył tego checkboxa (czyli powinno zapisać się 0).

jak mógłbym to inaczej zrobić?


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
arecki
post 10.10.2008, 14:48:19
Post #2





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

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


Może rozwiąż to za pomocą JS ? Zrób hidden_tag i zapisuj do niego w zdarzeniu 'onclick' wartość 'checked' z checkboxa. smile.gif


--------------------
Go to the top of the page
+Quote Post
AxZx
post 10.10.2008, 19:55:08
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


chciałem unikać JS jak tylko się da, no ale jak innego wyjścia to tak właśnie zrobię.
właściwie to już zrobiłem i działa:)

dziękuje za pomoc.
jednak gdyby było inne lepsze rozwiązanie (raczej po stronie php) to bardzo chętnie zmienię.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
jarek_bolo
post 10.10.2008, 21:06:58
Post #4





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

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


A nie możesz ustawić domyślnej wartości na 0 w tej kolumnie w bazie questionmark.gif


--------------------
"Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! |
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!
Go to the top of the page
+Quote Post
AxZx
post 10.10.2008, 22:00:24
Post #5





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


ustawiłem. ale co to da?
widzę jakie są wykonywane zapytania i właśnie dlatego poszukuję jakiegoś rozwiązania.
po prostu jak nie jest zaznaczony ten checkbox to w zapytanie nie pojawia się coś takiego jak status = 0.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
jarek_bolo
post 11.10.2008, 01:46:42
Post #6





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

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


Ty no ale ja chyba czegoś nie kumam.
Przecież jak mam sobie tabelę jakąś przykładową, powiedzmy, `produkt`:
| id | nazwa | cena | widoczny | <- jeśli widoczny to ma jeden, jeśli nie to zero.

I teraz dając:
  1. INSERT INTO `produkt` () VALUES();

Normalnie dodaje mi rekord do bazy. Mowa o bazie MySQL.

Więc jeśli metoda $dane->fromArray($this->getRequest()->getParameterHolder()->getAll(), BasePeer::TYPE_FIELDNAME); buduje Ci zapytanie bez pola przechowującego wartość tego checkboxa, bo nie zaznaczony jest nie przesyłany to i tak ta kolumna powinna być wypełniona domyślną wartością :/

Chyba, że to jest jakaś dziwna właściwość Propela :/ A może spróbuj w konfiguracji yml wpisać domyślną wartość tego pola (jeśli jest w ogóle taka opcja).


--------------------
"Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! |
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!
Go to the top of the page
+Quote Post
Cysiaczek
post 11.10.2008, 02:05:02
Post #7





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Czy w schema.yml dajesz pole typu boolean, czy tinyint/integer?


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
AxZx
post 11.10.2008, 08:43:47
Post #8





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(jarek_bolo @ 11.10.2008, 02:46:42 ) *
Ty no ale ja chyba czegoś nie kumam.
Przecież jak mam sobie tabelę jakąś przykładową, powiedzmy, `produkt`:
| id | nazwa | cena | widoczny | <- jeśli widoczny to ma jeden, jeśli nie to zero.

I teraz dając:
  1. INSERT INTO `produkt` () VALUES();

Normalnie dodaje mi rekord do bazy. Mowa o bazie MySQL.

Więc jeśli metoda $dane->fromArray($this->getRequest()->getParameterHolder()->getAll(), BasePeer::TYPE_FIELDNAME); buduje Ci zapytanie bez pola przechowującego wartość tego checkboxa, bo nie zaznaczony jest nie przesyłany to i tak ta kolumna powinna być wypełniona domyślną wartością :/

Chyba, że to jest jakaś dziwna właściwość Propela :/ A może spróbuj w konfiguracji yml wpisać domyślną wartość tego pola (jeśli jest w ogóle taka opcja).


podczas insertu okej, no ale ja pisałem przecież, że chodzi mi o Update:)

Cytat(Cysiaczek @ 11.10.2008, 03:05:02 ) *
Czy w schema.yml dajesz pole typu boolean, czy tinyint/integer?


boolean.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
jarek_bolo
post 11.10.2008, 11:21:58
Post #9





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

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


Aaa, no chyba, że tak no i jawnie tego nie napisałeś, a z tego co napisałeś wczoraj w nocy nie dałem rady się domyślić, że mowa o Update smile.gif


--------------------
"Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! |
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!
Go to the top of the page
+Quote Post
athabus
post 12.10.2008, 17:20:54
Post #10





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Możesz nadpisać metodę save, tak aby w razie braku parametru nadawala mu wartość 0
Go to the top of the page
+Quote Post
AxZx
post 12.10.2008, 19:12:09
Post #11





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


chyba nie będzie to takie proste.

na podstawie parametru przesłanego z URL (lub innego) tworze odpowiedni model.

  1. <?php
  2. $nazwa_modelu = $this->getRequestParameter('nazwa_modelu');
  3.  
  4. $model = new $nazwa_modelu();
  5. $model->fromArray($this->getRequest()->getParameterHolder()->getAll(), BasePeer::TYPE_FIELDNAME);
  6. $model->save();
  7. ?>


więc jak? musiałbym każdemu modelowi taką metodę pisać. przy określonej ilości, powiedzmy 5 to jeszcze znośne jest. ale jak za kilka miesięcy wprowadzę kolejny model to takich poprawek może być więcej. bo to nie byłoby jedyne miejsce gdzie muszę to zmieniać.

hmm ale tak sobie myślę, że to mógłby być dobry pomysł. nie tyle dobry co jedyny rozsądny:) przy braku innych prostszych - mniej inwazyjnych w modele.
dzięki


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
woj_tas
post 13.10.2008, 10:15:01
Post #12





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

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


  1. <input type="hidden" name="nazwa_pola" value="0" />
  2. <input type="checkbox" name="nazwa_pola" />


--------------------
Go to the top of the page
+Quote Post
AxZx
post 13.10.2008, 10:23:20
Post #13





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


wiedziałem, że musi być jakieś proste, normalne rozwiązanie:)
dzięki wielkie!


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Wojciech Bańcer
post 13.10.2008, 20:55:59
Post #14





Grupa: Zarejestrowani
Postów: 12
Pomógł: 3
Dołączył: 8.05.2007
Skąd: Poznań

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


Ja osobiście stosuję JEDNO pole hidden, które zawiera id wszystkich checkboxów z wartością (1)
Dzięki temu wykonuję potem tylko dwa zapytania SQL, przy aktualizacji
- 1-sze zeruje wartości z tego pola hidden
- 2-gie wstawia wartości "1" na zaznaczonych polach.

Trochę więcej zabawy jest przy stronnicowaniu (trzeba wiedzieć jeszcze które ID wolno ruszać, czyli dochodzi drugie pole HIDDEN, a w update dodajemy "where id in ()"), ale takie rozwiązanie wydaje mi się najbardziej optymalne pod kątem zapytań SQL i łatwości wykonania.
Go to the top of the page
+Quote Post
AxZx
post 13.10.2008, 21:00:26
Post #15





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


a ja wykonuje tylko jedno zapytanie update....
smile.gif


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Wojciech Bańcer
post 13.10.2008, 21:08:27
Post #16





Grupa: Zarejestrowani
Postów: 12
Pomógł: 3
Dołączył: 8.05.2007
Skąd: Poznań

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


Jeden update zmienia Ci dwa rodzaje wartości? Podrzuć takie zapytanie, chętnie się douczę. smile.gif
Go to the top of the page
+Quote Post
AxZx
post 13.10.2008, 21:35:24
Post #17





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


ja pisze na temat - w tym temacie wykonuje się jedno zapytanie, jak zostało przedstawione nie potrzeba więcej.


--------------------
aplikacje internetowe | Symfony
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: 3.07.2025 - 18:54