2016-09-08 3 views
0

問題が発生しました。私は数日間は解決できません。Symfony Doctrine ManyToMany関係:認識されないフィールド

私はgroupeテーブルとstatistiquequestionテーブルを持っています。

1 statistiquequestion - >いくつかのgroupes 1 GROUPE - >いくつかのstatistiquequestion

私は、多対多の関係を設定しました。

エンティティ:

のGroupe:

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

.... 
} 

StatistiqueQuestion:

SQLSTATE[42S22]: Column not found: 1054 Unrecognized field 'statistiquequestion_groupe.groupe_id' in where clause 

彼女:私は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; 

.... 
} 

、私はこのエラーを持っていますeはオブジェクトを取得するコードです。

    $statsQuestion[]=$em->getRepository(StatistiqueQuestion::class)->findOneBy([ 'question' => $colle, 
                          'groupes' => $groupes 
                          ]); 

私は$ groupesをダンプするとき、目的の配列を取得します。

+0

に見つけた唯一の解決策だあなたはreferencedColumnNameとは= "ID" '@ORM \ JoinColumn(名前は= "groupe_id" を、必要がありますか) '?あなたは2つのエンティティをリンクする必要があります – olibiaz

+0

削除しましたが、変更はありません。 –

+0

あなたはそれを削除しましたが、まったく同じエラーがありますか? 'groupe_id unrecognized'? – olibiaz

答えて

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

それは最適ではないのですが、それは私が私の問題

0

たぶん、あなたは、データベースが同期していない場合は、おそらく教義必要

php app/console doctrine:mapping:info 

php app/console doctrine:schema:validate 

をしようと、いくつかの手がかりを持つことができます。スキーマ:アップデート(または場合は、マイグレーションを生成するにDoctrine Migrationsを使用しています)

+0

これらのコマンドにはエラーはありません。私のデータベースはマッピング情報と同期しています –

+0

'php bin/console doctrine:schema update'を起動したときにSQLをダンプしようとしました。 私はこれを取得:; ' のでDoctrineはこのフィールドが存在を知っている' TABLEのstatistiquequestion_groupeがCONSTRAINT FK_E1E778647A45358C FOREIGN KEY(groupe_id)を追加ALTERは、DELETE CASCADE ON GROUPE(ID)を参照します。私は間違いを見つけません。 おそらく、findByメソッドはウォークスルーではありません。 –

+0

'doctrine:schema:update'は実行するクエリがあることを伝えています。そのクエリを実行するには 'doctrine:schema:update --force'を実行します。 – seltzlab

関連する問題