【发布时间】:2014-10-29 14:10:30
【问题描述】:
我正在表 B 中创建与表 A 中的一个条目的多对一关系。
在刷新到数据库之前,我正在使用在控制器中设置的特定 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 上设置该对象二传手……
最初的问题是由Doctrine 2 category_id always NULL when set ManyToOne relationship回答的
现在我正在处理另一个错误:
ContextErrorException:注意:未定义的索引:table_a_id in /vagrant/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php 第 628 行
【问题讨论】:
-
请将控制器代码粘贴到您设置值的位置。
-
你可能是在暗示正确的事情,我是手动设置外键 id,而不是通过设置外对象来设置关系...
标签: php mysql symfony doctrine-orm many-to-one