Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony] dynamiczne pobieranie danych i zapis
AxZx
post
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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
arecki
post
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. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
AxZx
post
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ę.
Go to the top of the page
+Quote Post
jarek_bolo
post
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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
AxZx
post
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.
Go to the top of the page
+Quote Post
jarek_bolo
post
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).
Go to the top of the page
+Quote Post
Cysiaczek
post
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?
Go to the top of the page
+Quote Post
AxZx
post
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.
Go to the top of the page
+Quote Post
jarek_bolo
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
athabus
post
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
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
Go to the top of the page
+Quote Post
woj_tas
post
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
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!
Go to the top of the page
+Quote Post
Wojciech Bańcer
post
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
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....
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Wojciech Bańcer
post
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ę. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
AxZx
post
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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 27.09.2025 - 11:25