簡體   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