我可以使用相同的 table 来表示 Symfony 中的不同实体吗?

Can I use the same table to represent different Entities in Symfony?

我正在将旧的 PHP 项目迁移到 Symfony。我正在尝试基于我 无法更改 的现有数据库模式创建实体。我遇到了一个问题:

有一个 table 代表两个不同的实体。基本上,有一个布尔值(tinyint(1)),如果布尔值是假的,那么 table 的行代表一个购物车。如果布尔值为真,则该行代表一个订单。

Doctrine 是否可以区分这些实体并相应地获取这些实体?我愿意实施的解决方案是创建多个实体并覆盖这些实体存储库中的 find()findAll() 方法。还有其他方法可以实现吗?

这就是所谓的学说Inheritance Mapping

因此您将拥有一个 Cart 实体和一个 Order 实体扩展它。

/**
 * @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...
}

然后是您的 Order 实体。

/**
 * @ORM\Entity(repositoryClass=OrderRepository::class)
 */
class Order extends Cart {...}

这段代码可能有一些错误,我没有测试,但应该没问题。