在我的项目中,我有几个类表继承如下:
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
class Person
{
// ...
}
/** @Entity */
class Employee extends Person
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法,它根据具有公共getter的字段将实体转换为数组.这里的问题是我丢失了数组中的继承信息,因为鉴别器值没有存储在字段中.
所以我尝试的是以下内容,希望教义会自动设置$disc:
class Person
{
// can I automatically populate this field with 'person' or 'employee'?
protected $discr;
public function getDiscr() { return $this->discr; }
public function setDiscr($disc) { $this->discr; }
// ...
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在学说中使这项工作?或者我需要在实体到数组方法中读取类元数据?
我有一个继承层次结构,其中包含一个基本的Employee实体和一些用于特定员工类型的后代实体.我需要能够将基础Employee实体转换为更具体的实体(例如TemporaryEmployee),并从更具体的类型转换回基本类型(例如,如果员工不再是"临时"的话,那么我希望该实例只是持久化为Employee.在DB中,这只是在表中为特定子类添加或删除一行的问题.(我每个类都使用表.)虽然我没有看到如何使用EF调用.
我正在创建一个网站,该网站应至少具有两种类型的用户,公司和客户,其中两种用户具有相同的登录表单和不同的注册表单,并且它们可以彼此发送消息...
正常情况下(不用考虑教义)我认为数据库应该看起来像这样:
用户(标识,电子邮件,密码,facebook_id,角色)
公司(标识,user_id,名称,城市,...)
客户(id,user_id,名称) ,sex ...)
消息(id,sender_id(用户ID),receiver_id(用户ID),消息...)
...
因此,现在我想知道使用Doctrine和Symfony 4实施此要求的最佳和最简单的方法,实体的外观如何?
(注意:我没有使用FOSUserBundle)