Как сделать заказ через 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());

Ответы на вопрос(5)

Ваш ответ на вопрос