我遇到了一个好几天都解决不了的问题。
我有一个分组表和一个统计问题表。
1 statisticquequestion ->几个组1组->几个统计问题
我建立了一个多对多关系。
实体:
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;
....
}
当我试图找到一个statisticquequestion对象时,我有这个错误:
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
] );
当我转储$ groups时,我得到了一个对象数组。
也许你可以有一些线索尝试
php app/console doctrine:mapping:info
和
php app/console doctrine:schema:validate
如果数据库不同步,您可能需要一个doctrine:schema:update(或者在使用doctrine Migrations的情况下生成一个迁移)
找到解决办法了
问题是findBy方法不允许获取具有多对多关系的对象。
解决方案:
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;
}
这不是最优的,但这是我找到的唯一解决我的问题的方法