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();

所有类成员的 getter 和 setter 都已正确定义。

现在,“RokZaPrijavuProjekta”有一个对“Predmet”的外键引用,所以这些“RokZaPrijavuProjekta”中的许多都可以有相同的“Predmet”。

我想为此目的创建单向多对一关系,但不断抛出异常:

JP\AdminBundle\Entity\RokZaPrijavuProjekta 类没有名为 predmet 的关联

我翻遍了Doctrine 文档,但发现这是定义单向多对一关系的首选方式。

你知道这里可能有什么问题吗?


更新

  • 添加了 Predmet 实体代码...
  • 添加了存储库方法

非常感谢!

问候, 约万

4

3 回答 3

29

好吧,昨晚我又遇到了同样的问题。这次我花了一些时间来弄清楚为什么它上次突然开始工作(在我上面的问题时)。

因此,问题的底线和解决方案

在我的实体类中,我有两个注释@Column@ManyToOne注释,用于@Column在数据库@ManyToOne中定义列的名称并定义关系。关键是您需要删除 @Column注释并将其替换为@JoinColumn由此定义namereferencedColumnName属性。检查这些片段:

这将不起作用:

(有或没有@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 回答
2

附加信息,评论的格式很重要

我浪费了几个小时才发现我错过了评论中的星号

这行不通

/*
 * @ORM\OneToMany(targetEntity="\Custom\Models\ProductText", mappedBy="product", orphanRemoval=true, cascade={"persist","remove"})
 */
protected $texts;

然而这有效

/**
 * @ORM\OneToMany(targetEntity="\Custom\Models\ProductText", mappedBy="product", orphanRemoval=true, cascade={"persist","remove"})
 */
protected $texts;

注意第一个示例的第一行缺少的星号 (*)

于 2017-03-07T09:27:17.620 回答