![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
potrzebuję updatetować obiekt na podstawie formularza. Aby zaoszczędzić na robocie chcę zrobić update poprzez query zamiast przez pobranie i save. Mam taki problem gdzie zrobić update rekordu. Chodzi tylko o zwiększenie wartości pola integer o jeden. Zastanawiam się czy action to właściwe miejsce na doctrine query. Może lepiej w modelu? A może w klasie dziedziczącej po table? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Akcja to ewidentnie nie miejsce na takie działania. Tylko i wyłącznie model, a dokładnie to zależy od tego jak masz go zorganizowany.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, że w modelu - od tego on jest. Ze strony akcji możesz się co najwyżej ograniczyć do czegoś w stylu AbcRepo::getInstance()->increaseDef($id);
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czy metoda statyczna w modelu w stylu increaseSomethingValueInObject(id) będzie ok?
Ten post edytował SnakeEater 22.07.2010, 21:01:55 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Dla mnie by nie była ok z wielu powodów. Tym bardziej jeśli Twój model sprowadza się do gołych klas Doctrine, to metoda statyczna jest już całkowicie niepotrzebna.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
No to jak zrobić to właściwie bez pobierania modelu zwiększania pola i zapisywania go? Tabela nazywa się Answer, a pole do zwiększania wartości to votes.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Może to dobry przykład do zastosowania triggera? Zakładam, że w momencie dodania rekordu do tabeli X chcesz zwiększyć licznik w tabeli Y - do takich celów triggery nadają się idealnie.
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie nie. Użytkowanik ma do wyboru w formulardzu jedna z dwóch odpowiedzi. Dla wybranej odpowiedzi Answer muszę zwiększyć pole votes.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Też można zastosować wyzwalacz. Problem jest taki, że trigger niesie z sobą wiele problemów i rozrzuca działanie aplikacji na kod i na bazę.
Nie wiem jak masz to zrobić, bo nie wiem jak masz zorganizowany model. Jeśli jednak Twój "model" to co generuje Doctrine, to chyba dosyć dobrym rozwiązaniem byłaby metoda w tabeli. Przykład:
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Problem jest taki, że trigger niesie z sobą wiele problemów i rozrzuca działanie aplikacji na kod i na bazę. Odbiegając nieco od tematu: moim zdaniem to nie jest aż taki problem. Sam często korzystam z triggerów czy własnych funkcji w bazie danych (akurat PostgreSQL). Osobiście wychodzę z założenia, że to co można oprzeć na bazie danych i co przyspieszy działanie/zautomatyzuje dany proces, należy wykonać na bazie danych. Zgodzę się, że przy ewentualnej migracji na inny silnik bazy danych mogą nastąpić komplikacje (konieczność przeniesienia wspomnianych elementów z bazy danych), ale czy jest to częste zjawisko? No ale to moje zdanie, nie każdy musi się z nim zgadzać ![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
@phpion pełna zgoda, że warto przyspieszać i że rzadko zmieniany jest silnik bazy danych. W przypadku prostego triggera, można uznać, że nie ma problemów, ale przy bardziej skomplikowanych zależnościach pojawiają się problemy np. z testowaniem (pomimo pgTAP i mu podobnych) i utrzymaniem takiego kodu. Niestety, wszystko zależy od konkretnego przypadku i to w stosunku do niego trzeba podejmować decyzje.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 01:35 |