2如何在我的项目中加入两个实体

时间:2015-11-09 16:49:32

标签: join doctrine

我在项目和图像之间存在一对多的关系,在项目和合适之间存在多对一的关系。我想选择procts有image.cover = 1和propriety.activated = 1但代码总是给我项目的所有图像

class ProjectImage
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     *
     * @ORM\ManyToOne(targetEntity="BI\AdminBundle\Entity\Project", inversedBy="images")
     * @ORM\JoinColumn(nullable=false, name="id_project", referencedColumnName="id")
     */
    private $idProject;



******************
class Project
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     *
     * @ORM\ManyToOne(targetEntity="BI\AdminBundle\Entity\Promoteur", inversedBy="projects")
     * @ORM\JoinColumn(nullable=false, name="id_promoteur", referencedColumnName="id")
     */
    private $idPromoteur;

    /**
     *
     * @ORM\ManyToOne(targetEntity="BI\AdminBundle\Entity\Governorate")
     * @ORM\JoinColumn(nullable=false, name="id_governorate")
     */
    private $idGovernorate;

    /**
     *
     * @ORM\ManyToOne(targetEntity="BI\AdminBundle\Entity\Delegation")
     * @ORM\JoinColumn(nullable=true, name="id_delegation")
     */
    private $idDelegation;

    /**
     * @ORM\ManyToOne(targetEntity="BI\AdminBundle\Entity\Locality")
     * @ORM\JoinColumn(nullable=true, name="id_locality")
     */
    private $idLocality;

    /**
     * @ORM\OneToMany(targetEntity="BI\AdminBundle\Entity\ProjectImage", mappedBy="idProject",cascade={"persist", "remove", "merge"})
     */
    private $images;
**********************************
class Promoteur
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity = "BI\AdminBundle\Entity\Project", mappedBy = "idPromoteur")
     */
    private $projects;

1 个答案:

答案 0 :(得分:0)

在OneToMany关联上,您应该使用ArrayCollection,因为您可以在此端存储目标实体的多个实例。您还应该导入ArrayCollection类并在构造函数中实例化此集合。

因此,在Project类中,您可能希望添加以下内容:

use Doctrine\Common\Collections\ArrayCollection;

/**
 * @var ArrayCollection
 * @ORM\OneToMany(targetEntity="BI\AdminBundle\Entity\ProjectImage", 
   mappedBy="idProject",cascade={"persist", "remove", "merge"})
 */
private $images;

public function __construct() {
    $this->images = new ArrayCollection();
}

然后,您可以使用app/console doctrine:generate:entities生成getter和setter。此命令还将创建另外两种方法addImageremoveImage来管理您的收藏。

希望这会有所帮助