Doctrine|ORM|Symfony:可能与接口或多个实体有关系
Posted
技术标签:
【中文标题】Doctrine|ORM|Symfony:可能与接口或多个实体有关系【英文标题】:Doctrine|ORM|Symfony: Is possible relation to Interface or multiple entities 【发布时间】:2021-02-23 09:40:07 【问题描述】:简单示例: 我有两个用户 Admin 和 Client(都实现了 UserInterface)和 Cart - 三个实体类。管理员和客户可以拥有自己的购物车。如何配置/解析购物车实体关系以具有返回管理员或客户端用户的方法“getUser()”?
也许我可以在购物车中拥有 user_id 列和带有用户实体名称的第二列(类似于 DiscriminatorMapping 可以做的事情)?
class Admin implements UserInterface
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var Collection
* @ORM\OneToMany(targetEntity="Cart", mappedBy="???")
*/
private $carts;
....
class Client implements UserInterface
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var Collection
* @ORM\OneToMany(targetEntity="Cart", mappedBy="???")
*/
private $carts;
....
class Cart
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var UserInterface
* @ORM\ManyToOne(targetEntity="UserInterface", ???)
*/
private $user;
....
我尝试了this Doctrine 功能,还尝试了DisciminatorMapping 和复合键(多列连接)选项,但没有成功。
有什么帮助吗?
【问题讨论】:
【参考方案1】:我想你快到了。 DiscriminatorMapping 可能是要走的路。但是,您需要将 Client 和 Admin 绑定到 Parent 类。所以考虑这个层次结构:
用户(父类)
管理员(扩展用户) 客户端(扩展用户)然后在您的购物车实体中将关系绑定到用户实体。
【讨论】:
以上是关于Doctrine|ORM|Symfony:可能与接口或多个实体有关系的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 SonataAdminBundle (Symfony) 管理 Doctrine ORM 类表继承?
级联持久性不工作(Doctrine ORM + Symfony 2)
如何在 symfony 中更新新版本的 Doctrine2 和 ORM?