Мне интересно, есть ли способ получить записи из одной таблицы, используя 2 отношения ManyToMany (это, вероятно, проще объяснить этим примером).Doctrine ManyToMany - объединение нескольких отношений
У меня есть 3 модели: статья, тема и тип и есть отношение ManyToMany между статьей < -> Тема и статья < -> Тип и то, что я ищу, это получить типы для статей, которые назначены к определенной теме. Надеюсь, что это имеет смысл.
Ниже приводится заявление моих лиц:
class Article
{
/**
* @var topics
*
* @ORM\ManyToMany(targetEntity="Topic")
* @ORM\JoinTable(name="article_topic")
*/
protected $topics;
/**
* @var types
*
* @ORM\ManyToMany(targetEntity="Type", inversedBy="articles")
* @ORM\JoinTable(name="article_type")
*/
protected $types;
}
class Topic
{
/**
* @var Article
*
* @ORM\ManyToMany(targetEntity="Article")
*/
private $articles;
}
class Type
{
/**
* @var Article
*
* @ORM\ManyToMany(targetEntity="Article")
*/
private $articles;
}
Теперь в моем TypeRepository у меня есть метод: (ОБНОВЛЕНО)
public function getByTopic($topic = null)
{
$qb = $this->getEntityManager()->createQueryBuilder()
->select('t')
->from('Type', 't');
if ($topic) {
$subqb = $this->getEntityManager()->createQueryBuilder()
->select('a.id')
->from('Article', 'a')
->innerJoin('a.topics', 'atop', 'WITH', 'atop.id = :topicId')
;
$qb->innerJoin('t.articles', 'ta')
->where($qb->expr()->in('ta.id', $subqb->getDql())
->setParameter('topicId', $topic->getId());
}
return $qb->getQuery()->getResult();
}
и я получаю сообщение об ошибке: Invalid PathExpression. StateFieldPathExpression или SingleValuedAssociationField ожидается (но он показывает мне строку из шаблона ветви, и я изо всех сил пытаюсь разобраться в этом).
Вопросы, связанные с тем, как получить типы, присвоенные статьям, принадлежащим определенной теме.
Любые предложения оценены.
Спасибо.