[英]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.