I have entity Product
and Tires
.
One Product has more Tires and one Tire can be on more Products.
In my controller when I call
$product = $em->getRepository('MyBundle:Product')->find($id);
or
$tires = $product->getExtraTires();
Related Tires won't return.
/**
* 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);
}
And my Tires entity
/**
* 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;
}
I designed entities according doctrine doctumentation. When I add Product and choose tires to add everything looks ok in join table.
What am I missing?
EDIT
I found something, but I don't fully understand how does it work :)
In my controller when Im getting Product entity with
$product = $em->getRepository('MyBundle:Product')->find($id);
I have to go in twig into product.extraTires.owner.extraTires And then I can see my associated tires here. And suddenly I have one more query to the database. So somehow I'm not calling it in controller properly.
SOLUTION
Seems like query in controller wasn't complete. $tires
now return array of tires, you can also use ->getValues() method.
$product = $em->getRepository('MyBundle:Product')->find($id);
$tires = $product->getExtraTires()->toArray();