【发布时间】:2020-07-16 04:18:42
【问题描述】:
我有一个名为“产品”的通用实体,其中包含一些简单的字段,例如名称、描述和价格。我想将其用作基本实体,以便我可以基于此产品实体创建具有完全相同字段的其他实体。我可以轻松地复制整个实体类和存储库文件并将它们重命名为 Product1、Product1Repository 等,但我觉得这重复了很多代码。我肯定需要处理实体的副本,在我的数据库设计中添加另一个属性/列将无法满足我正在尝试做的事情。扩展或继承此类的最佳方法是什么,以便 Product2、Product3 和 ProductN 类可以作为准系统类存在,这些类仅继承 Product1 的所有内容并具有相应的 Doctrine Repository?我需要做什么才能做到这一点?这是我到目前为止的代码:
<?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...
谢谢!
【问题讨论】:
-
在这条路上你需要非常小心。 Doctrine 有一些解决方案,但没有一个(在我看来)效果很好。 PHP 特征可能有助于减少重复代码。仔细看看你的应用需要什么功能。然后看看是否有一种完全不同的方法可以尝试。否则尽量让事情尽可能简单。从总体上看,即使有几十个几乎相同的实体和存储库,最终也会成为您应用程序中相当小的一部分。