首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony Doctrine Relationship :不可识别字段

问Symfony Doctrine Relationship :不可识别字段
EN

Stack Overflow用户
提问于 2016-09-09 04:48:57
回答 2查看 757关注 0票数 0

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

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

1个统计问题-->几个组1个组-->几个统计问题

我建立了一个ManyToMany关系。

实体:

分组:

代码语言:javascript
复制
/**
 * Groupe
 *
 * @ORM\Table(name="groupe")
 * @ORM\Entity
 */
class Groupe
{
    ...
    /**
 * @ORM\ManyToMany(targetEntity="\PACES\StatistiqueBundle\Entity\StatistiqueQuestion", mappedBy="groupes",
 * cascade={"all"})
 */
private $statistiquesquestion;

....
}

StatistiqueQuestion:

代码语言:javascript
复制
/**
 * 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对象时,出现以下错误:

代码语言:javascript
复制
SQLSTATE[42S22]: Column not found: 1054 Unrecognized field 'statistiquequestion_groupe.groupe_id' in where clause

下面是我获取对象的代码:

代码语言:javascript
复制
                    $statsQuestion[]=$em->getRepository( StatistiqueQuestion::class )->findOneBy( [ 'question'  => $colle,
                                                                                             'groupes' => $groupes
                                                                                           ] );

当我转储$groupes时,我得到了一个预期的对象数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-10 01:44:27

找到了解决方案。

问题是findBy方法不允许获取具有ManyToMany关系的对象。

解决方案:

代码语言:javascript
复制
   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;
}

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

票数 0
EN

Stack Overflow用户

发布于 2016-09-10 00:11:31

也许你可以尝试一些线索

代码语言:javascript
复制
php app/console doctrine:mapping:info

和

代码语言:javascript
复制
php app/console doctrine:schema:validate

如果数据库不同步,您可能需要一个doctrine:schema:update (或者在使用Doctrine Migrations的情况下生成一个迁移)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39399972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档