我正在处理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吗?
谢谢和问候