![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Stawiam pierwsze kroki we frameworku symfony2 i niemogę przeskoczyć problemu.
Mam 3 tabele : questions (id, name, surname, email, question) categories(id, name) question_category(category_id, question_id). Jak łatwo się domyśleć jest to relacja wiele do wielu. Chcę zrobić aktualizację "questions". Zrobiłeem sobię kontroler :
Wyświetla on oczywiście formularz z polami (id, name, surname, email, question) oraz pole wielokrotnego wyboru kategorii. Tutaj mój QuestionType :
Jak widzicie, do kontrolera dodałem 2 linjki kodu : oraz Pierwsza wyświetla ilośc kategorii przed wysłaniem formularza, druga wyświetla ilość kategorii po wysłaniu formularza. To działa prawidło. Wchodzę sobię w edycję "question" która jest przyporządkowana do jednej kategorii i wyświetla się "przed1". Zaznaczam jeszcze jedną kategorię (czyli w swoim polu wielokrotnego wyboru mam już zaznaczone dwie opcje) kilkam submit i pod linijką "przed1" wyświetla się "po2". Jednak W bazie danych nic się nie zmienia, zapytanie update wykonuję się tylko do tabeli questions. Do tabeli question_category nic się nie dodaje. Moje pytanie : gdzie mam szukać błędu ? Jakie pliki ewentualnie wam wkleić, by ułatwić wam pomoc dla mnie ? ![]() Ten post edytował peter13135 4.07.2012, 11:28:09 -------------------- :)
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Powinieneś ustawić by Doctrine automatycznie zapisywał obiekty z relacji categories zapisując obiekt Question. Zrobisz to przy pomocy parametru cascade dla adnotacji @ManyToMany.
PS. Po co tworzysz nowy obiekt Request, skoro istnieje już jeden w systemie. Z poziomu kontrolera możesz odwołać się do niego przez metodę Controller::getRequest(). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dodałem, ale nic to nie zmieniło. Czy możesz rzucić na to okiem ?
Może tu coś skopałem. Praca na tych doctrinowych obiektach nie jest dla mnie oczywista. -------------------- :)
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Teraz wydaje się to być w porządku.
1. Czy obiekt $question posiada poprawne dane, w momencie kiedy go zapisujesz? 2. Czy ręczne zapisanie obiektu (nie poprzez Symfony'owy framework formularzy) również nie działa? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
1.Sprawdzam w ten sposób :
albo
I wyświetla się to co w formularzu wpisałem. 2.
Zrobiłem takie coś : Kategoria się dodaje (do tabeli categories) Ale nie dodaje się do question_categories :/ question->name ma wartość 'hehe nana' bez względu na to co wpiszę w formularzu. Może podlinkować wam całego bundla? Problem rozwiązany, tam gdzie było inversedBY dałem mappedBy i odwrotnie. Może mi ktoś powiedzieć, dlaczego ta zamiana poskutkowała ? Co to ma do rzeczy ? Przecież tabele są sobie równorzędne. Tak samo pytanie ma kategorię, jak i każda kategoria ma pytania. Ten post edytował peter13135 4.07.2012, 13:02:59 -------------------- :)
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tworząc relację wiele-do-wielu powinieneś tylko po jednej stronie ustawić @JoinTable. Dla tej strony relacji będzie inversedBy, dla drugiej mappedBy. Dla drugiej strony relacji ustawiasz już tylko @ManyToMany.
To którą stronę wybierzesz dla definicji @JoinTable jest bez znaczenia. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.06.2025 - 14:41 |