php - 我可以在 Symfony 中使用同一张表来表示不同的实体吗?
问题描述
我正在将一个旧的 PHP 项目迁移到 Symfony。我正在尝试根据无法更改的现有数据库架构创建实体。我面临一个问题:
有一个代表两个不同实体的表。基本上,有一个布尔值 (a tinyint(1)
),如果布尔值是假的,那么表格的行代表一个购物车。如果布尔值为真,则该行表示订单。
Doctrine 是否可以区分这些实体并相应地获取这些实体?我愿意实施的解决方案是创建多个实体并覆盖这些实体存储库中的find()
和findAll()
方法。还有其他方法可以实现吗?
解决方案
这就是学说所说的继承映射。
因此,您将拥有一个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 {...}
这段代码可能有一些错误,我没有测试它,但应该没问题。
推荐阅读
- python - MongoDB 使用带有更新的 $cond ($inc)
- python - Python3通过代理连接FTP
- r - ggplotly与geom_rect不显示geom_bar
- android - 仅将一部分数据显示到列表视图中并获取新活动 android studio 中的所有值?
- c# - 数据库更改后更新 WPF DataGrid 内容
- spring - 如何在新创建的 CartModel 中添加购物车条目?
- python - PY3MQI。AMQ9627 使用 sco.CertificateLabel 和 os 用户与证书标签用户不匹配时
- java - OpenJdk 无法识别的选项:--list-modules
- drupal - 如何在 Drupal 8 中使用 ajax 正确加载 webform?
- database - postgresql 数据库服务器和许多用户