Php 我可以使用同一个表来表示Symfony中的不同实体吗?
我正在将一个旧的PHP项目迁移到Symfony。我正在尝试基于现有数据库架构创建实体,我无法更改该架构。我面临一个问题: 有一个代表两个不同实体的表。基本上,存在一个布尔值(aPhp 我可以使用同一个表来表示Symfony中的不同实体吗?,php,doctrine,Php,Doctrine,我正在将一个旧的PHP项目迁移到Symfony。我正在尝试基于现有数据库架构创建实体,我无法更改该架构。我面临一个问题: 有一个代表两个不同实体的表。基本上,存在一个布尔值(atinyint(1)),如果布尔值为false,则表中的行表示一个购物车。如果布尔值为true,则该行表示顺序 信条是否有可能区分这些实体并相应地获取这些实体?我愿意实现的解决方案是创建几个实体并覆盖这些实体存储库中的find()和findAll()方法。还有别的方法可以实现吗?这就是教义所说的 因此,您将有一个购物车实体
tinyint(1)
),如果布尔值为false,则表中的行表示一个购物车。如果布尔值为true,则该行表示顺序
信条是否有可能区分这些实体并相应地获取这些实体?我愿意实现的解决方案是创建几个实体并覆盖这些实体存储库中的
find()
和findAll()
方法。还有别的方法可以实现吗?这就是教义所说的
因此,您将有一个购物车
实体和一个订单
实体对其进行扩展
/**
* @ORM\Table()
* @ORM\Entity(repositoryClass="App\Repository\CartRepository")
* @ORM\InheritanceType(value="SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="is_order", columnDefinition="BOOL DEFAULT FALSE")
* @ORM\DiscriminatorMap(
* value={
* CART::IS_CART=Cart::class,
* CART::IS_ORDER=Order::class
* }
* )
*/
class Cart {
const IS_CART = FALSE;
const IS_ORDER = TRUE;
... // Entity field, getters, setters, functions...
}
然后是您的订单
实体
/**
* @ORM\Entity(repositoryClass=OrderRepository::class)
*/
class Order extends Cart {...}
这段代码可能有一些错误,我没有测试它,但应该可以。您可以试一试。从未见过将布尔值用作鉴别器列,但它可能会工作。享受你的模式带来的乐趣。如果里面有这样的东西,谁知道你还会遇到什么。@Cerad我不认为你的评论是正确的。这是一个完全合理的模式。使用布尔值作为鉴别器值没有错。另外,
订单
实体可能与购物车
实体没有任何区别。这里没有理由再有一张桌子了!