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