Как сделать заказ через OneToMany / ManyToOne
У меня есть класс Product, в котором есть много полей для ManyToMany, таких как ингредиенты, размеры, виды и т. Д. Всего около 14 различных полей Не все поля имеют отношение к каждому продукту.
Я настроил отображение так
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;
Это прекрасно работает для многих / многих.
Проблема в моей таблице product_ingredients. Мне нужно было добавить дополнительное поле, что означает необходимость перехода с ManyToMany на OneToMany / ManyToOne. Ну вот так
/**
* @var ProductIngredient[]
*
* @ORM\OneToMany(targetEntity="ProductIngredient", mappedBy="product")
* @ORM\JoinColumn(name="productId", referencedColumnName="id")
*/
private $ingredients;
Теперь мой ProductIngredient Entity выглядит следующим образом
/**
* @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;
Поэтому в своем классе продуктов для видов я использую @ORM \ OrderBy, так что виды уже упорядочены. Есть ли способ, которым я могу так или иначе сделать это для моего поля ингредиентов?
Или я неправильно делаю свою логику, и эти поля даже не должны быть полями в классе продукта, а должны просто искать в хранилище?
Я хотел, чтобы это было легко, чтобы я мог просматривать свои объекты, как$product->getIngredients()
вместо того, чтобы делать
$ingredients = $this->getDoctrine()->getRepository('ProductIngredient')->findByProduct($product->getId());