Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony2][SF][SF2] Problem z zapisaniem relacji ManyToOne
Foxx
post
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
 
Start new topic
Odpowiedzi (1 - 7)
usb2.0
post
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
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
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
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 (IMG:style_emoticons/default/wink.gif) ?
Go to the top of the page
+Quote Post
Foxx
post
Post #6





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

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


(IMG:style_emoticons/default/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
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.
Go to the top of the page
+Quote Post
Foxx
post
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 (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 06:26