Mam klasę produktu, która zawiera wiele pól dla ManyToMany, takich jak składniki, rozmiary, gatunki, itp. Łącznie około 14 różnych pól Nie wszystkie pola są istotne dla każdego produktu.Jak zamówić przez OneToMany/ManyToOne
mam mapowanie skonfigurować jak ten
Class product {
/**
* @var Species[]
* @ORM\ManyToMany(targetEntity="Species")
* @ORM\JoinTable(name="product_species",
* joinColumns={@ORM\JoinColumn(name="productId", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="speciesId", referencedColumnName="id")}
* )
* @ORM\OrderBy({"name" = "asc"})
*/
private $species;
Działa to doskonale na manytomany/manyto jednym.
Problem polega na moim stole product_ingredients Musiałem dodać dodatkowe pole, co oznacza konieczność przejścia z ManyToMany do OneToMany/ManyToOne Więc tak
/**
* @var ProductIngredient[]
*
* @ORM\OneToMany(targetEntity="ProductIngredient", mappedBy="product")
* @ORM\JoinColumn(name="productId", referencedColumnName="id")
*/
private $ingredients;
Teraz moja ProductIngredient Podmiot wygląda następująco
/**
* @var IngredientType
* @ORM\ManyToOne(targetEntity="IngredientType", fetch="EAGER")
* @ORM\JoinColumn(name="ingredientTypeId", referencedColumnName="id")
*/
private $ingredientType;
/**
* @var Ingredient
*
* @ORM\ManyToOne(targetEntity="Ingredient", inversedBy="products", fetch="EAGER")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="ingredientId", referencedColumnName="id")
* })
*/
private $ingredient;
/**
* @var Product
*
* @ORM\ManyToOne(targetEntity="Product", inversedBy="ingredients")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="productId", referencedColumnName="id")
* })
*/
private $product;
Tak więc w mojej klasie produktów dla gatunków używam @ORM \ OrderBy, więc gatunki są już zamówione .. Czy istnieje sposób, w jaki sposób mogę to zrobić w moim polu składników?
Czy robię źle swoją logikę, a te nie powinny być nawet polami w klasie produktów i powinny być po prostu wyszukiwane przez repozytorium?
ja chce go mieć łatwy więc mogłem pętli mojego obiektów jak $product->getIngredients()
zamiast robić
$ingredients = $this->getDoctrine()->getRepository('ProductIngredient')->findByProduct($product->getId());
to zgłasza błąd (Unrec rozpoznane pole: name), ponieważ "name" nie istnieje w ProductIngredient Jest w encji składnika. – Kris
To jest błąd w twoich innych mapowaniach, nie w tym ... –
Czy możesz dać mi przykład? Moja encja produktowa łączy się z ProductIngredient, który łączy się z Ingredient. Próbowałem wykonać polecenie w klasie productingredient, ale ponieważ jest to wieletoone, jest ono ignorowane. – Kris