![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Czy w symfony można dynamicznie z poziomu kodu php (akcji w kontrolerze) dodawać nowe tabele/kolumny do tabel w bazie danych MySQL ? Oczywiście zrobienie zwykłego zapytania SQL nie jest problemem, jednakże po zmodyfikowaniu pliku schema.yml i wywołaniu Kod php symfony doctrine:build --all "Dynamicznie" stworzone tabele są usuwane. Potrzebne jest mi to do dosyć dynamicznego systemu obsługi danych pochodzących z konfigurowalnych formularzy. Można w nim tworzyć nowe formularze, dodawać do nich elementy (inputy,textarea, pole z datą itp. itd.) a następnie dane przesłane z formularza trafiają do bazy danych do dynamicznie tworzonych tabel (każdy formularz ma swoją osobną tabelę do przechowywania danych). Gdybym mógł to zastosowałbym rozwiązanie z tabelą o kolumnach key i value, niestety muszę mieć możliwość łatwego sortowania i wyszukiwania po paru kryteriach jednocześnie co uniemożliwia zastosowanie takiego rozwiązania (no chyba ze pobierałbym wszystkie rekordy, mapował na tablicę i wyszukiwał/sortował w czystym php, ale to samo w sobie jest bez sensu) Ten post edytował Diwi 12.08.2010, 15:17:07 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 395 Pomógł: 80 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zamiast
użyj
To uaktualni model, formularze i filtry nie usuwając bazy. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Mógłbyś nieco dokładniej opisać to co robisz? Tworzenie osobnej tabeli dla każdego formularza to naprawdę głupi pomysł - a z obecnego opisu ciężko wywnioskować czy rzeczywiście konieczny.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pomysł jak pomysł, może nie idealny, ale jedyny, który pasuje do potrzeb:
System polega na tworzeniu formularzy zgłoszeniowych na różnego rodzaju wydarzenia i zbieranie danych o uczestnikach. Każdy formularz może być dosłownie "zbudowany" w panelu administracyjnym poprzez dodawanie elementów. No i teraz potrzebuję mieć możliwość później w panelu administracyjnym wyświetlić w tabeli wszystkie dane, łatwo je posortować i wyszukiwać według konkretnych kryteriów (wielu naraz). Dlatego właśnie zdecydowałem się na tworzenie nowych tabel i kolumn pod każdy element formularza, bo to daje mi możliwość w łatwy sposób wykonywać w/w operacje, i własnie w tym miejscu odpadła opcja wykorzystania tabeli key => value. Jeśli ktoś ma pomysł jak to za pomocą MySQL'a zrealizować inaczej, łatwiej, tak żeby nie modyfikować bazy danych dynamicznie, to stawiam duże duże piwo ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
O ile dobrze rozumiem:
Pierwsza tabela na pola formularza: id, id formularza, nazwa pola, typ pola (enum: text, textarea, select itp.) Druga tabela na predefiniowane wartości dla pól typu select, radio czy checkbox: id, id pola, wartość (..value="..."), słowna etykietka Trzecia tabela to formularz - do niego podłączone są pola z pierwszej tabeli Sam robiłem coś takiego i w mniej-więcej takiej formie spisało się. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
I coś takiego mam zaimplementowane, ale to jest dopiero I częśc czyli budowanie formularzy. Z tym pod względem bazy danych nie mam żadnego problemu.
Problematyczne jest zbieranie danych z tych formularzy w taki sposób aby później wyświetlić je w panelu administracyjnym w gridzie, wyszukiwać i sortować. Gdyby nie potrzeba wyszukiwania i sortowania to w ogóle nie byłoby problemu bo rozwiązanie na zasadzie tabeli key value byłoby wystarczające. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Odpowiedzi mógłbyś wrzucać do kolejnej tabeli - pozostaje problem z zapisem odpowiedzi do list wielokrotnego wyboru.
Mam wrażenie, że tutaj lepiej byłoby skorzystać z nierelacyjnej bazy danych. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
To też nie jest problem, robię implode(',', $odpowiedzi) i jest ok.
A co do kolejnej tabeli, no to właśnie po to tworzę sobie dynamicznie tabele w systemie ![]() A co do nierelacyjnej bazy, eh, gdybym mógł to bym w ogóle nie poruszał tematu ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat To też nie jest problem, robię implode(',', $odpowiedzi) i jest ok. Albo mi się wydaje, albo wcześniej wspomniałeś o jakimś sortowaniu - takie coś nie jest zbyt pomocne w takim razie. ![]() Cytat A co do kolejnej tabeli, no to właśnie po to tworzę sobie dynamicznie tabele w systemie i stąd moje pytanie na początku topicu. Tak, tylko Ty chciałeś robić osobną tabelę dla każdego formularza (nie wiem szczerze powiedziawszy jakby to miało pomóc) - a ja napisałem "kolejną" w sensie poza tymi trzema, czwarta na odpowiedzi - dla wszystkich formularzy wspólna.Cytat A co do nierelacyjnej bazy, eh, gdybym mógł to bym w ogóle nie poruszał tematu Od biedy możesz i na XMLu czy zwykłych zserializowanych tablicach skończyć - w zależności od potrzeb czy raczej wymagań względem wydajności.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Tak, tylko Ty chciałeś robić osobną tabelę dla każdego formularza (nie wiem szczerze powiedziawszy jakby to miało pomóc) - a ja napisałem "kolejną" w sensie poza tymi trzema, czwarta na odpowiedzi - dla wszystkich formularzy wspólna. No ok, ale to i tak wymagałoby tworzenia nowych kolumn dynamicznie, bo inaczej nie wyobrażam sobie takiej tabeli. No chyba że miałbyś jakiś pomysł ![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat ale to i tak wymagałoby tworzenia nowych kolumn dynamicznie, bo inaczej nie wyobrażam sobie takiej tabeli. A nie wystarczy Ci ID pola plus wartość podana przez użytkownika?Kod +-----------------------------+ Ostatnia tabela zawiera dane podane przez użytoniwka.
| Formularze | +----+------------------------+ | id | nazwa | +----+------------------------+ | 1 | Mój pierwszy formularz | +----+------------------------+ +---------------------------------------+ | Pola formularzy | +----+---------------+----------+-------+ | id | id formularza | typ | nazwa | +----+---------------+----------+-------+ | 1 | 1 | text | Imię | | 2 | 1 | textarea | Adres | | 4 | 1 | radio | Płeć | +----+---------------+----------+-------+ +---------------------------------+ | Predefiniowane wartości dla pól | +----+---------+------------------+ | id | id pola | wartość | +----+---------+------------------+ | 1 | 4 | Kobieta | | 2 | 4 | Mężczyzna | +----+---------+------------------+ +---------------------------------+ | Odpowiedzi | +----+---------+------------------+ | id | id pola | wartość | +----+---------+------------------+ | 1 | 1 | Krzysiek | | 2 | 2 | Mój adres domowy | | 3 | 4 | Mężczyzna | +----+---------+------------------+ |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
To jest właśnie tabela key value, tak więc małe zadanko żebyś zobaczył że nie wystarczy
![]() Spróbuj wyszukać po dwóch różnych parametrach (np. wszystkich mężczyzn których imie zaczyna się na K) a potem posortuj według imion alfabetycznie ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 17:31 |