Doctrine - 查询抛出三个实体

时间:2015-09-06 21:35:21

标签: php doctrine-orm associations entity

我正在处理Doctrine2中的一个小问题:

我有三个实体:

Article,SpecialArticle,SpecialArticleComponent

SpecialArticle:

class SpecialArticle extends ModelEntity {

    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var Article
     *
     * @ORM\ManyToOne(targetEntity="Article")
     * @ORM\JoinColumn(name="articleID", referencedColumnName="id")
     */
    private $article;

    /**
     * INVERSE SIDE
     *
     * @var \Doctrine\Common\Collections\ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="SpecialArticleComponent", mappedBy="specialarticle")
     */
    private $components;

    public function __construct() {

        $this->components = new ArrayCollection();

    }

    /**
     * Get id
     *
     * @return integer
     */
    public function getId() {

        return $this->id;

    }

    /**
     * Get article
     *
     * @return Article
     */
    public function getArticle() {

        return $this->article;

    }

    /**
     * Get components
     *
     * @return SpecialArticleComponent
     */
    public function getComponents() {

        return $this->components;

    }
}

SpecialArticleComponent

class SpecialArticleComponent extends ModelEntity {

    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var integer $specialArticleId
     *
     * @ORM\Column(name="specialArticleID", type="integer", nullable=false)
     */
    private $specialArticleId;

    /**
     * @var integer $articleId
     *
     * @ORM\Column(name="articleID", type="integer", nullable=false)
     */
    private $articleId; 

    /**
     * @var SpecialArticle
     *
     * @ORM\ManyToOne(targetEntity="SpecialArticle", inversedBy="components")
     * @ORM\JoinColumn(name="specialArticleID", referencedColumnName="id")
     */
    private $specialarticle;

    /**
     * @var
     *
     * @ORM\OneToOne(targetEntity="Article")
     * @ORM\JoinColumn(name="articleID", referencedColumnName="id")
     */
    private $article;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId() {

        return $this->id;

    }

    /**
     * Get specialArticleId
     *
     * @return integer
     */
    public function getSpecialArticleId() {

        return $this->specialArticleId;

    }

    /**
     * Get articleID
     *
     * @return integer
     */
    public function getArticleId() {

        return $this->articleId;

    }

    /**
     * Get article
     *
     * @return Article
     */
    public function getArticle() {

        return $this->article;

    }

}

当我想获得“文章”和“SpecialArticleComponents”抛出“SpecialArticle”时,它就是这样的:

$builder->select('specialarticle', 'article', 'components')
        ->from('SpecialArticle', 'specialarticle')
        ->leftJoin('specialarticle.article', 'article')
        ->leftJoin('specialarticle.components', 'components')

但是当我想使用“OneToOne”-assoiation让“文章”抛出“SpecialArticleComponent”时,它会失败:

$builder->select('specialarticle', 'article', 'components', 'componentarticle')
        ->from('SpecialArticle', 'specialarticle')
        ->leftJoin('specialarticle.article', 'article')
        ->leftJoin('specialarticle.components', 'components')
        ->leftJoin('components.article', 'componentarticle')

编辑(完整的错误消息):

  Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message 'SELECT specialarticle, article, o, mac, ca FROM SpecialArticle specialarticle LEFT JOIN specialarticle.article article LEFT JOIN specialarticle.components components LEFT JOIN components.article componentarticle in 

有人知道为什么我不能使用我的“SpecialArticleComponent”中声明的OneToOne-assoziation吗?

谢谢和问候

0 个答案:

没有答案