Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][SF][SF2] Problem z zapisaniem relacji ManyToOne
Foxx
post 31.10.2013, 17:39:33
Post #1





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Używam Bundla SonataAdmin, mam 2 encje, Product i Category, a w nich

Product:
  1. /**
  2. * @ORM\OneToMany(targetEntity="Category", mappedBy="product", cascade={"persist"})
  3. */
  4. protected $categories;


Category:
  1. /**
  2.  * @ORM\ManyToOne(targetEntity="Product", inversedBy="categories", cascade={"persist"})
  3.  * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
  4.  */
  5. protected $product;


W ProductAdmin.php gdy użyję podstawowego typu pola obsługującego tę relację:
  1. ->add('categories')


Wyświetla się bardzo ładny jQuerowy multiple select w postaci tagów reprezentujacych produkt (z krzyżykiem do usuwania).
Problem w tym, że gdy się tam doda/usunie produkty to po zapisaniu zmiany nie są zachowane. Walidacja przechodzi mimo, że to jest pole wymagane. Czy coś jeszcze powinienem dodać w konfiguracji encji żeby ta relacja została zapisana?

Ten post edytował Foxx 31.10.2013, 17:41:39
Go to the top of the page
+Quote Post
usb2.0
post 31.10.2013, 17:43:11
Post #2





Grupa: Zarejestrowani
Postów: 341
Pomógł: 25
Dołączył: 28.09.2008
Skąd: Lublin

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


ja zawsze to pisalem w tym stylu i problemow nie mialem
  1. ->add('cateogries','entity',array(
  2. 'class' => 'bundle:klasa',
  3. 'property' => 'pole'
  4. ))


i nigdy nie uzywam cascade ale to male ma znaczenie raczej

Ten post edytował usb2.0 31.10.2013, 17:45:17
Go to the top of the page
+Quote Post
Foxx
post 1.11.2013, 14:42:25
Post #3





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Tylko, tak jak pisałem, używam SonataAdminBundle i o ile wiem to sonata używa defaultowo jednego ze swoich typów, chyba sonata_type_model i sobie mapuje klasę samodzielnie. W każdym razie zmiana na entity nie pomogła niestety. Przypuszczam, że czegoś mi brakuje w klasie encji...
Go to the top of the page
+Quote Post
usb2.0
post 1.11.2013, 18:18:30
Post #4





Grupa: Zarejestrowani
Postów: 341
Pomógł: 25
Dołączył: 28.09.2008
Skąd: Lublin

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


zapewne wygenerowales gety i sety nie?
Go to the top of the page
+Quote Post
pyro
post 1.11.2013, 18:29:17
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


A co to w ogóle za bezsens logiczny? Kategoria może być użyta tylko i wyłącznie raz?

W owocach może być pomarańcza, ale grejfrut już nie wink.gif ?


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Foxx
post 1.11.2013, 19:09:17
Post #6





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


smile.gif Napisałem ten przykład analogicznie do mojego prawdziwego kodu żeby nie musieć tłumaczyć czym co jest, faktycznie niefortunnie. Załóżmy jednorazowość kategorii.

Co do getterów i setterów to mam to, co generuje polecenie doctrine:generate:entities czyli w tym przypadku getter i adder:

  1. public function addCategory(\Acme\FrontendBundle\Entity\Category $categories)
  2. {
  3. $this->categories[] = $categories;
  4.  
  5. return $this;
  6. }


Po dotychczasowym researchu widzę, że jest jakiś problem z setterem, ale nigdzie żadnego konkretnego wyjaśnienia nie widzę. Nie rozumiem dlaczego ten bundle udostępnia taki typ pola, ale nie jest ono obsługiwane...

Ten post edytował Foxx 1.11.2013, 19:10:29
Go to the top of the page
+Quote Post
pyro
post 2.11.2013, 08:59:02
Post #7





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


No to strzelając w ciemno powinno być prawdopodobnie coś takiego:

  1. public function addCategory(\Acme\FrontendBundle\Entity\Category $categories)
  2. {
  3. $this->categories[] = $categories;
  4. $categories->setProduct($this);
  5.  
  6. return $this;
  7. }


Zadajesz wiele pytań na temat Sf2 / ORM, a czytałeś w ogóle ich dokumentację? Bo sporo z tych rzeczy zdaje się tam wyjaśnione.


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Foxx
post 3.11.2013, 11:39:38
Post #8





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Dodanie $categories->setProduct($this); pomogło, przy jednoczesnym ustawieniu by_reference na false.
Czytam dokumentację, pytam gdy nie znajduję rozwiązania. Moje tematy nie zawsze kończą się odesłaniem do manuala smile.gif
Sporo tego jest do czytania, zdarza się coś przegapić.
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: 27.04.2024 - 08:03