当前位置: 首页 > 知识库问答 >
问题:

教义e:: 关系ManyToOne将不工作

穆承运
2023-03-14

我有一个这样的家长班

/** @ORM\MappedSuperclass */
class BaseValue
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var field
     * @ORM\OneToMany(targetEntity="Field", mappedBy="value", cascade="all")
     */
    protected $field;

    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param int $id
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    /**
     * @return field
     */
    public function getField()
    {
        return $this->field;
    }

    /**
     * @param field $field
     */
    public function setField($field)
    {
        $this->field = $field;
    }
}

像这样的孩子

 * @ORM\Entity
 * @ORM\Table(name="integers")
 */
class Integer extends BaseValue
{
    /**
     * @var integer
     *
     * @ORM\Column(name="value", type="integer", nullable=true)
     */
    protected $value;

    /**
     * @return string
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * @param string $value
     */
    public function setValue($value)
    {
        $this->value = $value;
    }

}

现在我想讲述另一个班级的孩子,像这样

* @ORM\Entity
 * @ORM\Table(name="fields")
 */
class Field
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var
     * @ORM\ManyToOne(targetEntity="BaseValue", mappedBy="field", cascade="all")
     * @ORM\JoinColumn(name="vid", referencedColumnName="id")
     */
    protected $value; // but it does not work

它总是给我以下错误:

[教义\通用\注释\注释异常]
[创建错误]在属性zmpim\Entity\Fiel$value上声明的注释@ORM\ManyToOned::没有名为"mappdBy"的属性。可用属性:塔吉特实体,级联,获取,反转

两者都得到了mappdby,...所以这个错误似乎是毫无意义的

更新:

字段有值和标签。这些值从BaseValue继承到intgerValue、StringValue和后来的其他值中...

我的一夫一妻关系是继承的父类。像这样,现在:

/** @ORM\MappedSuperclass */
class BaseValue
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var Field
     * @ORM\OneToMany(targetEntity="Field", mappedBy="field", cascade="persist", orphanRemoval=true )
     */
    protected $field;

这是我的男朋友:

/**
 * 
 * @ORM\Entity
 * @ORM\Table(name="fields")
 */
class Field
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var int|null
     * @ORM\ManyToOne(targetEntity="BaseValue", inversedBy="value")
     * @ORM\JoinColumn(name="vid", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $value;

它仍然给我一个错误,但现在它是:

从zmpim\Entity\Field到zmpim\Entity\BaseValue的关系所引用的[Doctrine\ORM\orException]
列名id不存在。

共有1个答案

刘弘济
2023-03-14

你的实体字段是你映射的反转面,所以你必须使用这个,而不是使用MappdBy声明

 /**
     * Inversed side
     * @var int|null
     * @ORM\ManyToOne(targetEntity="BaseValue", inversedBy="field")
     * @ORM\JoinColumn(name="[your_name]", referencedColumnName="[id]", onDelete="CASCADE")
     */
    protected $value;

为了更好地理解反向边和映射边属性,您可以阅读以下内容:反向边和拥有边

再次阅读后,您会意识到两个实体之间的关系问题,但如果您声明了多个注释,则必须设置inversedBy属性,否则将出现错误。这就是你所拥有的。不能使用mappedBy属性声明ManyToOne注释,因为它不存在,并按原则引发异常。

恢复:

多通协会=

* @ORM\ManyToOne(targetEntity="[yourEntity]", inversedBy="[Field]")

请注意,本方要求声明:

 * @ORM\JoinColumn(name="[your_name]", referencedColumnName="[id]", onDelete="CASCADE")

独身癖=

* @ORM\OneToMany(targetEntity="[An_Entity]",
     * mappedBy="[Field]", cascade={"persist"}, orphanRemoval=true)

编辑您的答案:您的映射仍然不正确,您的数据在InversedBy和mappdBy需要切换。

 类似资料:
  • 我怎样才能解决这个问题? 当我尝试时:

  • 我正在使用教义2来绘制学术时间表。以下是对这些关系的简化观察: 一个类有事件(一对多) 事件具有类型(多对一) 一个事件有一个位置(多对一) 使用

  • 我在将带有@ManyToOne关系的实体(雇员)映射到带有@OneToMany关系的实体(社区)时遇到了问题。 当我将一个实体(社区)分配给一个实体(员工),其中社区的值为空时,它工作正常。 问题出现了,如果雇员已经为社区分配了价值。当我更改该值并保存更改时,该员工为社区获得了新的值,并且这个新社区在集合中获得了该员工。唯一的问题是,老社区仍然有这个员工在收集,但它应该被删除。这只有在数据库重新启

  • 所以我在网上搜索了我的问题的答案,但没有找到有帮助的东西,基本上是需要在两个类之间有一个ManyToOne关系,其中一个类有一个EmbeddedId,我要把代码留在这里,错误信息是它给(我使用野蝇来运行服务器)。 公共类InventoryPK实现可序列化{ } @实体@Table(name=“inventario”,schema=“mxnextmob”) 公共类库存扩展基本模型{ } 公共类公司扩

  • 问题内容: 尝试创建组合键(EmbeddedId)时,我遇到了Ebean的问题。 这是我所拥有的草案: 注意 :我正在将Ebean 4.1.4与Java 1.6一起使用。 因此,此代码运行良好,但存在一个我正在尝试解决的问题-数据库中的结果表如下所示: entityB_ID [主要] entityA_FK_ID [主要] 实体A_fk 如您所见,考虑到“ entityA_FK_ID”列,最后一列是

  • 问题内容: 我有一个表具有另一个表的外键(许多关系),但我希望它可以为空。 像这样: 但是抛出和表示子类型不能为null。有什么办法可以使ManyToOne接受null? 问题答案: 您需要设置: 不。 该是指示DDL生成工具,包括SQL列类型约束。