Доктрина — Запрос бросить три сущности

я имею дело с небольшой проблемой в Doctrine2:

У меня есть три сущности:

Статья, Особенная статья, Специальная статья, Компонент

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;

}

}

Когда я хочу получить «Article» и «SpecialArticleComponents» бросить «SpecialArticle», это работает следующим образом:

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

Но когда я хочу использовать ассоциацию «OneToOne», чтобы получить «Article», выбрасываю «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

Кто-нибудь знает, почему я не могу использовать свою ассоциацию OneToOne, объявленную в моем «SpecialArticleComponent»?

Спасибо и приветствия

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …