Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Symfony] Entities - dwukrotna relacja nie działa
Foxx
post 11.04.2013, 13:41:26
Post #1





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

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


Załóżmy, że mamy obiekt Produkt, który ma KrajProdukcji i KrajPrzeznaczenia. Logiczne jest, że w takiej sytuacji robię encję "Kraj" i będę chciał ją przypisać do dwóch pól obiektu Produkt. Zrobiłem tak i jednak mi to nie działa, dostaję w debuggerze (bez błędów):

Cytat
Acme\ProductBundle\Entity\Product
The mappings Acme\ProductBundle\Entity\Product#KrajProdukcji and Acme\ProductBundle\Entity\Kraj#Products are incosistent with each other.

The mappings Acme\ProductBundle\Entity\Product#KrajPrzeznaczenia and Acme\ProductBundle\Entity\Kraj#Products are incosistent with each other.


No i widzę ten problem, że encja Kraj ma pole $products, które ma mappedBy="kraj" a przecież w Product nie ma pola "kraj" tylko jest krajPochodzenia i krajPrzeznaczenia, ale nie wiem jak to poprawnie zrobić.

Encja Product wygląda tak:

  1. /**
  2.   * @ORM\ManyToOne(targetEntity="Kraj", inversedBy="products")
  3.   * @ORM\JoinColumn(name="kraj_pochodzenia_id", referencedColumnName="id")
  4.   */
  5. protected $krajPochodzenia;
  6.  
  7. /**
  8.   * @ORM\ManyToOne(targetEntity="Kraj", inversedBy="products")
  9.   * @ORM\JoinColumn(name="kraj_przeznaczenia_id", referencedColumnName="id")
  10.   */
  11. protected $krajPrzeznaczenia;


A encja Kraj wygląda tak:

  1. /**
  2.   * @ORM\OneToMany(targetEntity="Product", mappedBy="kraj")
  3.   */
  4. protected $products;


Ten post edytował Foxx 11.04.2013, 13:45:31
Go to the top of the page
+Quote Post
destroyerr
post 11.04.2013, 14:17:04
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Pozostaje Ci dorzucić do encji Country (skoro products jest po angielsku to i reszta też powinna być w takim języku) pola: productsImported i productsExported.
Go to the top of the page
+Quote Post
Foxx
post 11.04.2013, 14:52:11
Post #3





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

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


Cytat(destroyerr @ 11.04.2013, 15:17:04 ) *
Pozostaje Ci dorzucić do encji Country (skoro products jest po angielsku to i reszta też powinna być w takim języku) pola: productsImported i productsExported.


Chyba rozumiem - zrobiłem tak i notice zniknęły, a formularz nie przestał działać czyli chyba jest ok... Obecnie moja encja Product wygląda tak:
  1. /**
  2.   * @ORM\ManyToOne(targetEntity="Kraj", inversedBy="productsPochodzenie")
  3.   * @ORM\JoinColumn(name="kraj_pochodzenia_id", referencedColumnName="id")
  4.   */
  5. protected $krajPochodzenia;
  6.  
  7. /**
  8.   * @ORM\ManyToOne(targetEntity="Kraj", inversedBy="productsPrzeznaczenie")
  9.   * @ORM\JoinColumn(name="kraj_przeznaczenia_id", referencedColumnName="id")
  10.   */
  11. protected $krajPrzeznaczenia;


A encja Kraj:

  1. /**
  2.   * @ORM\OneToMany(targetEntity="Product", mappedBy="krajPochodzenia")
  3.   */
  4. protected $productsPochodzenie;
  5.  
  6. /**
  7.   * @ORM\OneToMany(targetEntity="Product", mappedBy="krajPrzeznaczenia")
  8.   */
  9. protected $productsPrzeznaczenie;


Cytat(destroyerr @ 11.04.2013, 15:17:04 ) *
skoro products jest po angielsku to i reszta też powinna być w takim języku

Tak, tak, przepisałem prawdziwy kod na szybko upraszczając go żeby łatwiej było mi pomóc smile.gif
Go to the top of the page
+Quote Post
basso
post 29.04.2013, 14:22:33
Post #4





Grupa: Zarejestrowani
Postów: 155
Pomógł: 1
Dołączył: 12.12.2010

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


Hej... a w polach wyboru masz checkboxy czy multiselect?
Bo ja mam identycznie, niby to jest relacja 1 do wielu (1:n), a ja mam po prostu select w którym mogę wybrać tylko jeden, a nie wiele :| dziwne.

@ORM\OneToMany(targetEntity="Product", mappedBy="krajPochodzenia")

Rozumiem to jako... do jednego produktu można przyporządkować wiele krajów pochodzenia... a u mnie się select pojawia.
Go to the top of the page
+Quote Post
Foxx
post 29.04.2013, 14:42:33
Post #5





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

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


Cytat(basso @ 29.04.2013, 15:22:33 ) *
Hej... a w polach wyboru masz checkboxy czy multiselect?
Bo ja mam identycznie, niby to jest relacja 1 do wielu (1:n), a ja mam po prostu select w którym mogę wybrać tylko jeden, a nie wiele :| dziwne.

@ORM\OneToMany(targetEntity="Product", mappedBy="krajPochodzenia")

Rozumiem to jako... do jednego produktu można przyporządkować wiele krajów pochodzenia... a u mnie się select pojawia.


Ja też mam select i tak powinno być. U Ciebie też jest dobrze: do produktu można przyporządkować jeden kraj pochodzenia, a jeden kraj pochodzenia może być przyporządkowany do wielu różnych produktów. Jeżeli chciałbyś móc dodatkowo przyporządkować wiele krajów pochodzenia do jednego produktu to potrzebowałbyś relacji ManyToMany
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: 14.06.2025 - 23:52