Orm 条令类&引用;没有名为“…”的关联&引用;
我希望你能帮我解决这个问题,因为我真的看不出这里出了什么问题 我有两个实体:RokZaPrijavuProjekta和premet RokZaPrijavuProjekta: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
/**
* @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很高兴我能以任何方式找到它;)我不知道如何处理同样的错误,直到我找到你的解释,你应该得到更多的赞扬,佩洛维奇先生!我知道我不应该只为了“谢谢”而留下评论。但该死的,我花了好几个小时才找到。非常感谢你。