Symfony 4学说与findby多对多->未找到列:1054

时间:2018-10-14 09:10:02

标签: symfony doctrine many-to-many symfony4 findby

我正在尝试使用Doctrine findBy()进行多对多连接

$articles = $entityManager->getRepository(Articles::class)
->findBy(['rubriquesrubriques'=>$id],['idarticles'=>"ASC"]);

但我知道

An exception occurred while executing 
'SELECT t0.idarticles AS idarticles_1, 
t0.thetitle AS thetitle_2, t0.theslug AS theslug_3, t0.thedescription AS 
thedescription_4, t0.thedate AS thedate_5, t0.users_idusers AS users_idusers_6 
FROM articles t0 WHERE
 articles_has_rubriques.rubriques_idrubriques = ? 
ORDER BY t0.idarticles ASC' with params ["2"]:
SQLSTATE[42S22]: Column not found: 1054 Champ
 'articles_has_rubriques.rubriques_idrubriques' inconnu dans where clause

我的数据库中存在articles_has_rubriques.rubriques_idrubriques列, 但我看不到INNER JOIN!

当我使用简单的Find()使我的人很多时:

$articles = $entityManager->getRepository(Articles::class)->find($id);

查询正确!

SELECT t0.idrubriques AS idrubriques_1, 
t0.thertitle AS thertitle_2 
FROM 
rubriques t0 
INNER JOIN articles_has_rubriques ON t0.idrubriques =
articles_has_rubriques.rubriques_idrubriques 
WHERE articles_has_rubriques.articles_idarticles = ?

是否无法在Symfony的4.1.6版本中使用findBy执行我的many2many查询?

这是我的ORM关系:

在实体 Rubriques.php

 /**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="Articles", mappedBy="rubriquesrubriques")
 */
private $articlesarticles;

在实体 Articles.php

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\ManyToMany(targetEntity="Rubriques", inversedBy="articlesarticles")
 * @ORM\JoinTable(name="articles_has_rubriques",
 *   joinColumns={
 *     @ORM\JoinColumn(name="articles_idarticles", referencedColumnName="idarticles")
 *   },
 *   inverseJoinColumns={
 *     @ORM\JoinColumn(name="rubriques_idrubriques", referencedColumnName="idrubriques")
 *   }
 * )
 */
private $rubriquesrubriques;

非常感谢

1 个答案:

答案 0 :(得分:0)

我的问题很愚蠢:

我有一个简单的方法可以做到这一点:

$rubriqueActu = $entityManager->getRepository(Rubriques::class)->find($id);
$articles = $rubriqueActu->getArticlesarticles();

SQL:

SELECT t0.idarticles AS idarticles_1, t0.thetitle AS thetitle_2, 
 t0.theslug AS theslug_3, t0.thedescription AS thedescription_4,
 t0.thedate AS thedate_5, t0.users_idusers AS users_idusers_6
FROM articles t0 INNER JOIN articles_has_rubriques 
ON t0.idarticles = articles_has_rubriques.articles_idarticles 
WHERE articles_has_rubriques.rubriques_idrubriques = ?