多多关系:未被认识的领域


Symfony Doctrine ManyToMany Relationship : unrecognized field

我遇到了一个好几天都解决不了的问题。

我有一个分组表和一个统计问题表。

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;
}

这不是最优的,但这是我找到的唯一解决我的问题的方法