4

ここで何が悪いのか本当にわからないので、この問題についてあなたが私を助けてくれることを願っています。

私には2つのエンティティがあります:RokZaPrijavuProjektaPredmet

RokZaPrijavuProjekta:

/**
* @ORM\Table(name="rok_prijava_projekta")
* @ORM\Entity(repositoryClass="JP\AdminBundle\Repository\RokZaPrijavuProjektaRepository")
*/
class RokZaPrijavuProjekta
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var integer $id_predmet
 * @ORM\ManyToOne(targetEntity="Predmet")
 * @ORM\Column(name="id_predmet", type="integer")
 */
private $predmet;

/**
 * @var date $od
 * @ORM\Column(name="od", type="date")
 */
private $od;

/**
 * @var date $do
 * @ORM\Column(name="do", type="date")
 */
private $do;

/**
 * @var string $info
 * @ORM\Column(name="info", type="string", length=120)
 */
private $info;
}

Predmetエンティティコード:

/**
 * @ORM\Table(name="predmeti")
 * @ORM\Entity(repositoryClass="JP\AdminBundle\Repository\PredmetRepository")
 */
class Predmet
{
/**
 * @var integer $id
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $sifra
 * @ORM\Column(name="sifra", type="string", length=64)
 */
private $sifra;

/**
 * @var boolean $vidljiv
 * @ORM\Column(name="vidljiv", type="boolean")
 */
private $vidljiv;
}

リポジトリ方式:

$q = $this->createQueryBuilder('r')
->select('rzpp')
->where('rzpp.predmet = :predmet')
->from('JPAdminBundle:RokZaPrijavuProjekta', 'rzpp')
->leftJoin("rzpp.predmet", "p")
->setParameter('predmet', $predmet)
->getQuery();

すべてのクラスメンバーのゲッターとセッターの両方が適切に定義されています。

現在、「RokZaPrijavuProjekta」には「Predmet」への外部キー参照があるため、これらの「RokZaPrijavuProjekta」の多くは同じ「Predmet」を持つことができます。

この目的のために単方向のManyToOneリレーションを作成したいのですが、例外がスローされ続けます。

クラスJP\AdminBundle \ Entity \ RokZaPrijavuProjektaには、predmetという名前の関連付けがありません

Doctrineのドキュメント全体を調べましたが、これが一方向の多対1の関係を定義するための好ましい方法であることがわかりました。

ここで何が問題になるのか分かりますか?


アップデート

  • Predmetエンティティコードを追加しました...
  • リポジトリメソッドを追加

どうもありがとう!

よろしく、ジョヴァン

4

3 に答える 3

29

さて、昨夜また同じ問題に遭遇しました。今回は、前回(上記の質問の時点で)なぜ突然機能し始めたのかを理解するのに少し時間がかかりました。

したがって、問題の結論と解決策は次のとおりです。

私のエンティティクラスには、データベース内の列の名前を定義し、関係を定義するために使用した注釈の両方が@Columnありました。要点は、注釈を削除し、それを置き換えてと属性の両方を定義する必要があるということです。これらのスニペットをチェックしてください:@ManyToOne@Column@ManyToOne @Column@JoinColumnnamereferencedColumnName

これは機能しません:

(ありまたはなしのいずれか@JoinColumn

/**
 * @var integer $file
 * @ORM\Column("name="id_file", type="integer")
 * @ORM\ManyToOne(targetEntity="File")
 */
private $file

しかし、これ

/**
 * @var integer $file
 * @ORM\ManyToOne(targetEntity="File")
 * @ORM\JoinColumn(name="id_file", referencedColumnName="id")
 */
private $file

これが誰かの役に立てば幸いです...

乾杯!

于 2011-08-19T22:20:58.337 に答える
2

Predmet エンティティ コードを表示できますか?

または、次のコードを試してみてください。

// RokZaPrijavuProjekta
/**
 * @ORM\ManyToOne(targetEntity="Predmet", inversedBy="rokzaprojects")
 */
protected $predmet;


//Predmet
/**
 * @ORM\OneToMany(targetEntity="RokZaPrijavuProjekta", mappedBy="predmet")
 */
protected $rokzaprojects;
于 2011-08-01T14:57:43.037 に答える