簡短的問題:我可以避免為父類的繼承類生成外鍵嗎?可以在關系所有者而不是父類中設置用于繼承映射的鑒別器列嗎?解釋:我正在設計一個發票模型,其中發票主題可以是 3 種類型之一:合同客戶提供者在閱讀了Doctrine 繼承映射之后,我認為Class table 繼承是最適合我需求的。如果我可以從Invoiceto繪制關系,映射的超類可以更好地滿足我的需求InvoiceSubject,但我認為我不能:映射的超類不能是實體,它不是可查詢的,并且由映射的超類定義的持久關系必須是單向的(只有擁有方)。這意味著在映射的超類上根本不可能進行一對多關聯。此外,僅當映射的超類目前僅在一個實體中使用時,多對多關聯才有可能。此外,使用接口可能是一種解決方案,但關系中的接口只能映射到一個實體。所以,這是我的模型:/** * @ORM\Entity */class Invoice{ /** * @ORM\ManyToOne(targetEntity="InvoiceSubject") * @var InvoiceSubject */ protected $subject;}/** * @ORM\Entity * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="invoicesubject_type", type="string") * @ORM\DiscriminatorMap({"invoice-subject" = "InvoiceSubject", "contract" = "Contract", "provider" = "Provider", "client" = "Client"}) */class InvoiceSubject{ /** * @ORM\Id * @ORM\Column(type="integer") */ protected $id;}/** * @ORM\Entity */class Contract extends InvoiceSubject{}/** * @ORM\Entity */class Provider extends InvoiceSubject implements ProviderInterface{}/** * @ORM\Entity */class Client extends InvoiceSubject{}但是,當我嘗試生成模型 ( bin/console doctrine:schema:update --dump-sql) 時,我看到它試圖創建從子類到父類的外鍵(表已經存在并且有數據):ALTER TABLE contract ADD CONSTRAINT FK_E9CCE71ABF396750 FOREIGN KEY (id) REFERENCES invoice_subject (id) ON DELETE CASCADE;ALTER TABLE provider ADD CONSTRAINT FK_B2F1AF1BBF396750 FOREIGN KEY (id) REFERENCES invoice_subject (id) ON DELETE CASCADE;ALTER TABLE client ADD CONSTRAINT FK_B2F1AF1BBF396750 FOREIGN KEY (id) REFERENCES invoice_subject (id) ON DELETE CASCADE;這意味著來自不同表的id 之間會發生沖突,或者我需要在每個表中使用不同的值,沒有一個解決方案是好的。所以,問題是:有沒有辦法避免這個外鍵并在關系所有者類中設置鑒別器Invoice?就我而言,InvoiceSubject實際上并不需要作為表存在,我被迫創建它,因為類表繼承迫使我這樣做。或者,這種建模是完全錯誤的,我應該使用另一種方法嗎?
- 1 回答
- 0 關注
- 183 瀏覽
添加回答
舉報
0/150
提交
取消