我有實體Product
和Tires
。 一個產品有更多的輪胎和一個輪胎可以在更多的產品。Symfony 2,從多對多協會獲得實體
在我的控制器當我打電話
$product = $em->getRepository('MyBundle:Product')->find($id);
或
$tires = $product->getExtraTires();
相關輪胎將不會返回。
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity
*/
class Product {
public function __construct()
{
$this->extraTires = new ArrayCollection();
}
/**
* @ORM\ManyToMany(targetEntity="Tires", mappedBy="products")
* @ORM\JoinTable(name="product_tires",
* joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tires_id", referencedColumnName="id")})
*/
private $extraTires;
/**
* Get extraTires
*
* @return ArrayCollection
*/
public function getExtraTires()
{
return $this->extraTires;
}
/**
* Add extraTires
*
* @param Tires $extraTires
* @return Product
*/
public function addExtraTire(Tires $extraTires)
{
$this->extraTires[] = $extraTires;
return $this;
}
/**
* Remove extraTires
*
* @param \Wielton\WieltonBundle\Entity\Tires $extraTires
*/
public function removeExtraTire(Tires $extraTires)
{
$this->extraTires->removeElement($extraTires);
}
我的輪胎實體
/**
* Tires
*
* @ORM\Table(name="Tires")
* @ORM\Entity
*/
class Tires {
public function __construct()
{
$this->products = new ArrayCollection();
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="Product", inversedBy="extraTires")
* @ORM\JoinTable(name="product_tires",
* joinColumns={@ORM\JoinColumn(name="tires_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")})
*/
private $products;
/**
* Add products
*
* @param Product $products
* @return Tires
*/
public function addProduct(Product $products)
{
$this->products[] = $products;
return $this;
}
/**
* Remove products
*
* @param Product $products
*/
public function removeProduct(Product $products)
{
$this->products->removeElement($products);
}
/**
* Get products
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getProducts()
{
return $this->products;
}
我根據doctrine doctumentation設計實體。當我添加產品並選擇輪胎時,在連接表中添加所有內容看起來都不錯。
我錯過了什麼?
編輯
我發現了一些東西,但我不完全瞭解它是如何工作:)
在我的控制器時,即時得到產品實體
$product = $em->getRepository('MyBundle:Product')->find($id);
我有去樹枝 product.extraTires.owner.extraTires 然後我可以在這裏看到我的相關輪胎。突然之間,我又對數據庫進行了一次查詢。所以不知何故,我沒有正確地在控制器中調用它。
解決方案 好像在控制器中的查詢不完整。 $tires
現在返回輪胎數組,也可以使用 - > getValues()方法。
$product = $em->getRepository('MyBundle:Product')->find($id);
$tires = $product->getExtraTires()->toArray();
看起來像你的測試代碼如何? –
林不知道功能測試會在這裏有什麼好處。我試圖做出這種基調,但它只是返回與輪胎的空陣列http://symfony.com/doc/current/cookbook/testing/doctrine.html –
只是一個愚蠢的問題,但你有數據庫中的「輪胎」?你的課「累」有'@ORM \ Entity'註解? – zilongqiu