我遇到了一个好几天都解决不了的问题。
我有一个分组表和一个统计表。
1个统计问题-->几个组1个组-->几个统计问题
我建立了一个ManyToMany关系。
实体:
分组:
/**
* 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时,我得到了一个预期的对象数组。
发布于 2016-09-10 01:44:27
找到了解决方案。
问题是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;
}它不是最优的,但它是我找到的解决问题的唯一方法
发布于 2016-09-10 00:11:31
也许你可以尝试一些线索
php app/console doctrine:mapping:info和
php app/console doctrine:schema:validate如果数据库不同步,您可能需要一个doctrine:schema:update (或者在使用Doctrine Migrations的情况下生成一个迁移)
https://stackoverflow.com/questions/39399972
复制相似问题