我有一個產品類,其上有許多字段,用於ManyToMany,例如配料,尺寸,種類等。共約14個不同的字段 並非所有的字段都是與每個產品相關。如何在OneToMany/ManyToOne上訂購
我有映射設置了這樣
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;
這一個多對多/ manyto一個偉大工程。
的問題是在我的product_ingredients表我需要添加一個額外的領域,這意味着需要從多對多切換到一對多/多對一 所以像這樣
/**
* @var ProductIngredient[]
*
* @ORM\OneToMany(targetEntity="ProductIngredient", mappedBy="product")
* @ORM\JoinColumn(name="productId", referencedColumnName="id")
*/
private $ingredients;
現在我ProductIngredient實體貌似這個
/**
* @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 \排序依據,這樣的物種已經下令..有一個方法可以讓我好歹也是我的配料場做到這一點?
或者我在做我的邏輯錯誤,這些甚至不應該是產品類中的字段,應該只是由存儲庫查找?
我想它很容易通過我的對象,如$product->getIngredients()
代替,所以我可以循環在產品實體做
$ingredients = $this->getDoctrine()->getRepository('ProductIngredient')->findByProduct($product->getId());
這將引發錯誤(UNREC可識別的字段:名稱),因爲ProductIngredient中不存在「名稱」它在Ingredient實體中。 – Kris
這是你的其他映射不在這一個失敗... –
你能舉個例子嗎?我的產品實體連接到ProductIngredient,它連接到Ingredient。我嘗試在產品成分類中做orderby,但由於它是一個manytoone,所以它被忽略 – Kris