我是否以正确的方式设计我的 Symfony 实体?

我有一个名为“产品”的通用实体,它有一些简单的字段,例如名称、描述和价格。我想使用它作为基础实体,以便我可以基于此产品实体创建具有完全相同字段的其他实体。我可以轻松复制整个实体类和存储库文件并将它们重命名为 Product1、Product1Repository 等,但我觉得这会重复很多代码。我肯定需要处理实体的副本,向我的数据库设计添加另一个属性/列将无法满足我想要做的事情。扩展或继承此类的最佳方法是什么,以便 Product2、Product3、ProductN 类可以作为准系统类存在,只继承 Product1 的所有内容,并且还具有相应的 Doctrine 存储库?我需要做什么才能实现这个目标?这是我到目前为止的代码:


<?php


namespace 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...

谢谢你!


撒科打诨
浏览 102回答 2
2回答

茅侃侃

为什么不让你的基础实体产品变得抽象呢?那么你所有的其他产品都可以扩展它吗?抽象的:/**&nbsp;* @ORM\Entity(repositoryClass=ProductRepository::class)&nbsp;*/abstract class Product{产品1:/**&nbsp;* @ORM\Entity(repositoryClass=Product1Repository::class)&nbsp;*/class Product1 extends Product{

江户川乱折腾

您可以从 Doctrine 文档中检查类表继承。基本上,您使用子实体共有的所有字段创建基本实体,然后创建一个鉴别器列并映射该列可以具有的值,这些值将映射到您的子实体。<?phpnamespace 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”实体中声明的所有字段。
打开App,查看更多内容
随时随地看视频慕课网APP