亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我是否以正確的方式設計我的 Symfony 實體?

我是否以正確的方式設計我的 Symfony 實體?

PHP
撒科打諢 2023-08-06 15:40:26
我有一個名為“產品”的通用實體,它有一些簡單的字段,例如名稱、描述和價格。我想使用它作為基礎實體,以便我可以基于此產品實體創建具有完全相同字段的其他實體。我可以輕松復制整個實體類和存儲庫文件并將它們重命名為 Product1、Product1Repository 等,但我覺得這會重復很多代碼。我肯定需要處理實體的副本,向我的數據庫設計添加另一個屬性/列將無法滿足我想要做的事情。擴展或繼承此類的最佳方法是什么,以便 Product2、Product3、ProductN 類可以作為準系統類存在,只繼承 Product1 的所有內容,并且還具有相應的 Doctrine 存儲庫?我需要做什么才能實現這個目標?這是我到目前為止的代碼:<?phpnamespace App\Entity;use App\Repository\ProductRepository;use Doctrine\ORM\Mapping as ORM;/** * @ORM\Entity(repositoryClass=ProductRepository::class) */class Product{    /**     * @ORM\Id()     * @ORM\GeneratedValue()     * @ORM\Column(type="integer")     */    private $id;    /**     * @ORM\Column(type="string", length=255)     */    private $name;    /**     * @ORM\Column(type="string", length=255)     */    private $description;    /**     * @ORM\Column(type="string", length=255)     */    private $price;//Getters and setters here...謝謝你!
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

為什么不讓你的基礎實體產品變得抽象呢?那么你所有的其他產品都可以擴展它嗎?


抽象的:


/**

 * @ORM\Entity(repositoryClass=ProductRepository::class)

 */

abstract class Product

{

產品1:


/**

 * @ORM\Entity(repositoryClass=Product1Repository::class)

 */

class Product1 extends Product

{


查看完整回答
反對 回復 2023-08-06
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

您可以從 Doctrine 文檔中檢查類表繼承。

基本上,您使用子實體共有的所有字段創建基本實體,然后創建一個鑒別器列并映射該列可以具有的值,這些值將映射到您的子實體。

<?php

namespace MyProject\Model;


/**

* @Entity

* @InheritanceType("JOINED")

* @DiscriminatorColumn(name="discr", type="string")

* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})

*/

class Person

{

? ? // ...

}


/** @Entity */

class Employee extends Person

{

? ? // ...

}

通過這種方式,您將擁有一個 Person 表,其中包含名為“discr”的列以及您聲明的所有其他字段;和一個名為 Employee 的表,其中 Person.id 作為主鍵,Person 的外鍵,加上您在“Employee”實體中聲明的所有字段。


查看完整回答
反對 回復 2023-08-06
  • 2 回答
  • 0 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號