я имею дело с небольшой проблемой в 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»?
Спасибо и приветствия
Задача ещё не решена.
Других решений пока нет …