Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony] Entities - dwukrotna relacja nie działa
Forum PHP.pl > Forum > PHP > Frameworki
Foxx
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;
destroyerr
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.
Foxx
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
basso
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.
Foxx
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.