有一个消息系统,其中的消息可以属于一个咨询,但不是必须的。尽管所有咨询都有 1 个或多个消息...
我的实体是由 Doctrine 自动生成的,但是 vendor/bin/doctrine-module orm:validate-schema
错误地失败了......
vendor/bin/doctrine-module orm:validate-schema
[Mapping] FAIL - The entity-class 'Legetimen\Entity\Konsultasjon' mapping is invalid:
* The association Legetimen\Entity\Konsultasjon#meldinger refers to the owning side field Legetimen\Entity\Meldinger#konsulatsjon which is not defined as association, but as field.
* The association Legetimen\Entity\Konsultasjon#meldinger refers to the owning side field Legetimen\Entity\Meldinger#konsulatsjon which does not exist.
[Database] FAIL - The database schema is not in sync with the current mapping file.
相关协会的定义:
来自消息/梅尔丁格:
/**
* @var integer
*
* @ORM\Column(name="konsulatsjon", type="integer", precision=0, scale=0, nullable=true, unique=false)
* @ORM\ManyToOne(targetEntity="Konsultasjon", inversedBy="konsultasjonid")
*/
private $konsulatsjon;
来自我的“家长”咨询 Konsultasjon:
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="Legetimen\Entity\Meldinger", mappedBy="konsulatsjon", cascade={"persist"}, fetch="EAGER")
*/
private $meldinger;
我的 konsultasjon 是用外部触发器映射的,但不是我的消息(因为许多 konsultasjon 是 NULL)。
此外,我对拼写无能为力,因为这是一个遗留且相当困惑的应用程序......
如果您需要其他任何东西,请告诉我,任何帮助将不胜感激。
[编辑]
删除了评论中建议的 Messages (Meldinger) 中的 @var 和 @collumn,结果如下:
vendor/bin/doctrine-module orm:validate-schema
[Mapping] FAIL - The entity-class 'Legetimen\Entity\Konsultasjon' mapping is invalid:
* The mappings Legetimen\Entity\Konsultasjon#meldinger and Legetimen\Entity\Meldinger#konsulatsjon are inconsistent with each other.
[Mapping] FAIL - The entity-class 'Legetimen\Entity\Meldinger' mapping is invalid:
* The association Legetimen\Entity\Meldinger#konsulatsjon refers to the inverse side field Legetimen\Entity\Konsultasjon#konsultasjonid which is not defined as association.
* The association Legetimen\Entity\Meldinger#konsulatsjon refers to the inverse side field Legetimen\Entity\Konsultasjon#konsultasjonid which does not exist.
* The referenced column name 'id' has to be a primary key column on the target entity class 'Legetimen\Entity\Konsultasjon'.
[Doctrine\ORM\ORMException]
Column name `id` referenced for relation from Legetimen\Entity\Meldinger towards Legetimen\Entity\Konsultasjon does not exist.
orm:validate-schema
Konsultasjon ID:
/**
* @var integer
*
* @ORM\Column(name="konsultasjonid", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $konsultasjonid;
消息 ID/Meldinger
/**
* @var integer
*
* @ORM\Column(name="meldingerid", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $meldingerid;
最佳答案
当您不使用 $id
作为实体的主键时,您必须使用 JoinColumn
注释来配置实体之间的关系。 JoinColumn 。
如果要更改关系属性的列名,则需要使用 JoinColumn
而不是 Column
注释。
class Meldinger {
/**
* @var integer
*
* @ORM\Column(name="meldingerid", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $meldingerid;
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="Konsultasjon", inversedBy="meldinger")
* @JoinColumn(name="konsulatsjon", referencedColumnName="konsulatsjonid")
*/
private $konsulatsjon;
}
class Konsultasjon {
/**
* @var integer
*
* @ORM\Column(name="konsultasjonid", type="integer", precision=0, scale=0, nullable=false, unique=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $konsultasjonid;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="Legetimen\Entity\Meldinger", mappedBy="konsulatsjon", cascade={"persist"}, fetch="EAGER")
* @JoinColumn(name="meldinger", referencedColumnName="meldingerid")
*/
private $meldinger;
}
附注。
我还更正了
@ManyToOne
的 Meldinger
参数。关于php - Doctrine2 挑战,我有一对多,但不是多对一,,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27444889/