繁体   English   中英

Symfony / Doctrine 2 ManyToOne关系,ORM不会保留列的设置值,随后发生错误

[英]Symfony/Doctrine 2 ManyToOne relationship, ORM does not retain set value for column, error ensues

我正在表B中创建到表A中一个条目的ManyToOne关系。

我正在使用特定的key_id参数,该参数在刷新到数据库之前已在控制器中设置。 我的问题是,由于某种原因,由ORM创建的SQL使该键的值为空。 在ManyToOne关系之前,同一控制器没有设置和持久保留key_id值的问题。

这是我对表B的注释

    /**
     * @ORM\Column(type="string", length=63)
     * @Filter\Trim()
     * @Filter\StripNewlines()
     */
    private table_b_id

    /**
     * @ORM\ManyToOne(targetEntity="TableA", inversedBy="table_b_entries", fetch="EAGER")
     * @ORM\JoinColumn(name="table_b_id", referencedColumnName="table_a_id")
     */
    private $reference_to_table_a;

和表A

    /**
     * Constructor
     */
    function __construct()
    {
        $this->table_b_entries = new ArrayCollection();
    }

    /**
     * @ORM\OneToMany(targetEntity="TableB", mappedBy="table_b_id")
     */
    private $table_b_entries;

我得到的错误是:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'table_b_id' cannot be null

尽管我确实在刷新到db之前在控制器中对其进行了设置,并且已经验证了刷新的对象它包含该值,但是SQL不再包含此值了……我不确定它在哪里或为什么得到丢失...

更新资料

这里描述的错误是因为我没有设置参考对象,而是尝试在表B上手动设置参考列ID。我应该首先获取表A,然后通过参考设置器将对象设置在表B上。 。

最初的问题由以下人员回答: 原则2 category_id在设置ManyToOne关系时始终为NULL

现在,我正在处理另一个错误:

ContextErrorException:注意:未定义索引:/vagrant/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php行中的table_a_id

对于ManyToOne关系,您不需要两个字段。 这足够了:

class B
{
    /**
     * @ORM\ManyToOne(targetEntity="A", inversedBy="entitiesB")
     * @ORM\JoinColumn(name="name_of_column_on_table_b", referencedColumnName="column_from_table_a_to_be_referenced")
     */
    private $entityA;

    // ...
}

class A
{
    /**
     * @ORM\OneToMany(targetEntity="B", mappedBy="entityA")
     */
    private $entitiesB;

    // ...
}

Doctrine将在您的B表上自动创建一个名为entityA_id字段,对其进行索引并在两者之间创建外键。

当您拥有实体B实例时,只需调用即可检索它的A记录关系ID:

$b->getEntityA()->getId()

人们通常认为这将触发另一个查询,但不会,它只会从B记录中读取entityA_id ,以便进行解释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM