我遇到了一个我几天都无法解决的问题。
我有一张桌子和一张统计表。
1 statistiquequestion - >几个组合 1 groupe - >几个统计问题
我建立了ManyToMany关系。
实体:
Groupe:
/**
* Groupe
*
* @ORM\Table(name="groupe")
* @ORM\Entity
*/
class Groupe
{
...
/**
* @ORM\ManyToMany(targetEntity="\PACES\StatistiqueBundle\Entity\StatistiqueQuestion", mappedBy="groupes",
* cascade={"all"})
*/
private $statistiquesquestion;
....
}
StatistiqueQuestion:
/**
* StatistiqueQuestion
*
* @ORM\Table(name="statistiquequestion")
* @ORM\Entity
*/
class StatistiqueQuestion
{
...
/**
* @ORM\ManyToMany(targetEntity="\PACES\UserBundle\Entity\Groupe",inversedBy="statistiquesquestion" , cascade={"persist"})
* @ORM\JoinColumn(name="groupe_id", referencedColumnName="id")
*/
private $groupes;
....
}
当我尝试查找StatistiqueQuestion对象时,出现此错误:
SQLSTATE[42S22]: Column not found: 1054 Unrecognized field 'statistiquequestion_groupe.groupe_id' in where clause
这是获取对象的代码:
$statsQuestion[]=$em->getRepository( StatistiqueQuestion::class )->findOneBy( [ 'question' => $colle,
'groupes' => $groupes
] );
当我转储$ groupes时,我会按预期获得一系列对象。
答案 0 :(得分:0)
也许你可以尝试一些线索
php app/console doctrine:mapping:info
和
php app/console doctrine:schema:validate
如果数据库不同步,您可能需要一个学说:schema:update(或者在您使用Doctrine Migrations时生成迁移)
答案 1 :(得分:0)
找到了解决方案。
问题是findBy方法不允许获取具有ManyToMany关系的对象。
解决方案:
public function getStatColleForGroupes($colle, $groupes){
$requete = $this->_em->createQuery('SELECT s
FROM PACESStatistiqueBundle:StatistiqueColle s
WHERE s.colle = :colle
');
$requete->setParameters(array('colle'=>$colle));
$resultats= $requete->getResult();
foreach ($resultats as $resultat)
{
if ($groupes == $resultat->getGroupes()->toArray())
return $resultat;
}
return null;
}
这不是最佳,但它是我发现问题的唯一解决方案