我目前在使用属性的ManyToMany关系时遇到问题。 我有一个实体: - 产品 - PackProduit(两个实体之间的关系) - 包装(更多产品)
问题是我无法恢复产品构成包装,因为我会看到产品包装。
这些是创建的实体:
produit.php
<?php
namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Produit
*
* @ORM\Table(name="Acme_produit")
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\ProduitRepository")
*/
class Produit
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Acme\DemoBundle\Entity\PackProduit", mappedBy="produit")
*/
protected $packProduits;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="designation", type="string", length=255)
*/
private $designation;
/**
* @var integer
*
* @ORM\Column(name="quantite", type="integer")
*/
private $quantite;
public function __construct()
{
$this->packProduits = new ArrayCollection();
}
public function __toString()
{
return $this->nom;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
* @return Produit
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set designation
*
* @param string $designation
* @return Produit
*/
public function setDesignation($designation)
{
$this->designation = $designation;
return $this;
}
/**
* Get designation
*
* @return string
*/
public function getDesignation()
{
return $this->designation;
}
/**
* Set quantite
*
* @param integer $quantite
* @return Produit
*/
public function setQuantite($quantite)
{
$this->quantite = $quantite;
return $this;
}
/**
* Get quantite
*
* @return integer
*/
public function getQuantite()
{
return $this->quantite;
}
/**
* Add packProduits
*
* @param \Acme\DemoBundle\Entity\PackProduit $packProduits
* @return Produit
*/
public function addPackProduit(\Acme\DemoBundle\Entity\PackProduit $packProduits)
{
$this->packProduits[] = $packProduits;
return $this;
}
/**
* Remove packProduits
*
* @param \Acme\DemoBundle\Entity\PackProduit $packProduits
*/
public function removePackProduit(\Acme\DemoBundle\Entity\PackProduit $packProduits)
{
$this->packProduits->removeElement($packProduits);
}
/**
* Get packProduits
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getPackProduits()
{
return $this->packProduits;
}
}
PackProduit.php
<?php
namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* PackProduit
*
* @ORM\Table(name="Acme_pack_produit")
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\PackProduitRepository")
*/
class PackProduit
{
/**
* @ORM\Id
* @ORM\Column(type="integer", name="id")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\Produit", inversedBy="packProduits")
*/
protected $produit;
/**
* @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\Pack", inversedBy="packProduits")
*/
protected $pack;
/**
* @var integer
*
* @ORM\Column(name="quantite", type="integer")
*/
private $quantite;
public function __toString()
{
return 'PackProduit{'.$this->quantite.'}';
}
/**
* Set quantite
*
* @param integer $quantite
* @return PackProduit
*/
public function setQuantite($quantite)
{
$this->quantite = $quantite;
return $this;
}
/**
* Get quantite
*
* @return integer
*/
public function getQuantite()
{
return $this->quantite;
}
/**
* Set produit
*
* @param \Acme\DemoBundle\Entity\Produit $produit
* @return PackProduit
*/
public function setProduit(\Acme\DemoBundle\Entity\Produit $produit)
{
$this->produit = $produit;
return $this;
}
/**
* Get produit
*
* @return \Acme\DemoBundle\Entity\Produit
*/
public function getProduit()
{
return $this->produit;
}
/**
* Set pack
*
* @param \Acme\DemoBundle\Entity\Pack $pack
* @return PackProduit
*/
public function setPack(\Acme\DemoBundle\Entity\Pack $pack)
{
//$pack->addPackProduit($this);
$this->pack = $pack;
return $this;
}
/**
* Get pack
*
* @return \Acme\DemoBundle\Entity\Pack
*/
public function getPack()
{
return $this->pack;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
Pack.php
<?php
namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Pack
*
* @ORM\Table(name="Acme_pack")
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Entity\PackRepository")
*/
class Pack
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Acme\DemoBundle\Entity\PackProduit", mappedBy="produit", cascade={"persist", "remove"})
*/
protected $packProduits;
/**
* @ORM\ManyToOne(targetEntity="Acme\DemoBundle\Entity\Tva", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $tva;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255)
*/
private $nom;
/**
* @var float
*
* @ORM\Column(name="prix", type="float")
*/
private $prix;
/**
* @var float
*
* @ORM\Column(name="coef_correlation", type="float")
*/
private $coefCorrelation;
/**
* @var boolean
*
* @ORM\Column(name="active", type="boolean")
*/
private $active;
public function __construct()
{
$this->packProduits = new \Doctrine\Common\Collections\ArrayCollection();
$this->active = 1;
}
public function __toString()
{
return $this->nom;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set nom
*
* @param string $nom
* @return Pack
*/
public function setNom($nom)
{
$this->nom = $nom;
return $this;
}
/**
* Get nom
*
* @return string
*/
public function getNom()
{
return $this->nom;
}
/**
* Set prix
*
* @param float $prix
* @return Pack
*/
public function setPrix($prix)
{
$this->prix = $prix;
return $this;
}
/**
* Get prix
*
* @return float
*/
public function getPrix()
{
return $this->prix;
}
/**
* Add packProduits
*
* @param \Acme\DemoBundle\Entity\PackProduit $packProduits
* @return Pack
*/
public function addPackProduit(\Acme\DemoBundle\Entity\PackProduit $packProduits)
{
$this->packProduits[] = $packProduits;
return $this;
}
/**
* Remove packProduits
*
* @param \Acme\DemoBundle\Entity\PackProduit $packProduits
*/
public function removePackProduit(\Acme\DemoBundle\Entity\PackProduit $packProduits)
{
$this->packProduits->removeElement($packProduits);
}
/**
* Get packProduits
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getPackProduits()
{
return $this->packProduits;
}
/**
* Set active
*
* @param boolean $active
* @return Pack
*/
public function setActive($active)
{
$this->active = $active;
return $this;
}
/**
* Get active
*
* @return boolean
*/
public function getActive()
{
return $this->active;
}
/**
* Set tva
*
* @param \Acme\DemoBundle\Entity\Tva $tva
* @return Pack
*/
public function setTva(\Acme\DemoBundle\Entity\Tva $tva)
{
$this->tva = $tva;
return $this;
}
/**
* Get tva
*
* @return \Acme\DemoBundle\Entity\Tva
*/
public function getTva()
{
return $this->tva;
}
/**
* Set coefCorrelation
*
* @param float $coefCorrelation
* @return Pack
*/
public function setCoefCorrelation($coefCorrelation)
{
$this->coefCorrelation = $coefCorrelation;
return $this;
}
/**
* Get coefCorrelation
*
* @return float
*/
public function getCoefCorrelation()
{
return $this->coefCorrelation;
}
}
谢谢!
答案 0 :(得分:0)
$produits = array();
foreach($pack->getPackProduits() as $packProduits){
$produits[] = $packProduits->getProduit();
}
$produits
数组现在认为产品属于$pack
。
使用代理方法,您可以使其更加舒适,但我建议您将关系表从实体中删除。我觉得有点hacky。