Orm 条令类&引用;没有名为“…”的关联&引用;

Orm 条令类&引用;没有名为“…”的关联&引用;,orm,doctrine,relation,Orm,Doctrine,Relation,我希望你能帮我解决这个问题,因为我真的看不出这里出了什么问题 我有两个实体:RokZaPrijavuProjekta和premet RokZaPrijavuProjekta: /** * @ORM\Table(name="rok_prijava_projekta") * @ORM\Entity(repositoryClass="JP\AdminBundle\Repository\RokZaPrijavuProjektaRepository") */ class RokZaPrijavuProje

我希望你能帮我解决这个问题,因为我真的看不出这里出了什么问题

我有两个实体:RokZaPrijavuProjektapremet

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;
}
/**
 * @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();
premet实体代码:

/**
* @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;
}
/**
 * @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();
存储库方法:

/**
* @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;
}
/**
 * @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的关联

我看了一遍,但发现这是定义单向多对一关系的首选方法

你知道这里有什么问题吗


更新
  • 已添加PreMet实体代码
  • 添加了存储库方法

非常感谢

问候,,
Jovan

您能显示premet实体代码吗

或者试试下面的代码:

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


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

昨晚我又遇到了同样的问题。这一次,我花了一些时间来弄明白为什么上次(在我提出上述问题时)它突然开始工作

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

在我的实体类中,我有
@Column
@ManyToOne
注释,其中我使用
@Column
定义数据库中列的名称,并使用
@ManyToOne
定义关系。关键是您需要删除
@Column
注释,并将其替换为
@JoinColumn
,从而定义
名称
引用ColumnName
属性。查看以下代码片段:

这是行不通的: (带或不带
@JoinColumn

但这将
: 我希望这将有助于某人


干杯

其他信息,评论的格式确实重要

我浪费了几个小时才发现我在评论中漏掉了一个星号

这行不通

/*
 * @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;

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

对不起,我之前完全忘了包含“Predmet”实体代码,所以我编辑了我的帖子。通过指定“inversedBy”和“mappedBy”,这不是双向关系吗?嘿,Inori,我试着按照你的建议放置双向关系,但仍然不起作用(也许这与我的存储库方法代码有关?我已经再次编辑了我的帖子,并将其包括在内……谢谢!Inori,我不能说问题出在哪里,但现在它已经消失了。我复制/粘贴了你的代码,这次它起了作用。网站说明:在运行
app\console时,原则是:schema:create--dump sql
实体经理,我注意到在这两个表之间没有创建外键。可能是输入错误(但不确定是哪一个)…:-/无论如何…非常感谢!:)哈哈,很高兴我能帮上忙(?)我猜:Dhey jperovic,只是想对提出解决方案表示感谢。你可能只是帮我省了一个小时的挠头:谢谢你,杰洛维奇,两年后,解决方案仍然是帮助人们。我一直在兜圈子,直到我找到了这个。@AMP很高兴我能以任何方式找到它;)我不知道如何处理同样的错误,直到我找到你的解释,你应该得到更多的赞扬,佩洛维奇先生!我知道我不应该只为了“谢谢”而留下评论。但该死的,我花了好几个小时才找到。非常感谢你。