当前位置: 首页 > 知识库问答 >
问题:

具有API平台Symfony的继承实体

魏鸿哲
2023-03-14

我对平台API有问题(https://api-platform.com/)当我有一个从另一个实体继承的实体时。例如,从User实体继承的Worker实体。当我转到Platform API文档时,所有Worker属性都显示在User类中

这是一个比解释更好的模式。这是我的两个实体和问题文档的结果

/**
* User
*
* @ORM\Table(name="user")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"user" = "User", "worker" = "Worker"})
* @ApiResource
*
*/
class User
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @var string
 *
 * @ORM\Column(name="lastname", type="string", length=255)
 */
protected $lastname;

/**
 * @var string
 *
 * @ORM\Column(name="firstname", type="string", length=255)
 */
protected $firstname;


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set lastname
 *
 * @param string $lastname
 * @return User
 */
public function setLastname($lastname)
{
    $this->lastname = $lastname;

    return $this;
}

/**
 * Get lastname
 *
 * @return string
 */
public function getLastname()
{
    return $this->lastname;
}

/**
 * Set firstname
 *
 * @param string $firstname
 * @return User
 */
public function setFirstname($firstname)
{
    $this->firstname = $firstname;

    return $this;
}

/**
 * Get firstname
 *
 * @return string
 */
public function getFirstname()
{
    return $this->firstname;
}
}


/**
* Worker
*
* @ApiResource
*/
class Worker extends User
{

/**
 * @var \DateTime
 *
 * @ORM\Column(name="birthday", type="datetime")
 * @Assert\NotNull()
 * @Assert\DateTime()
 */
private $birthday;

/**
 * @var string
 *
 * @ORM\Column(name="mobilePhone", type="string", length=255, nullable=true)
 */
private $mobilePhone;

/**
 * @return \DateTime
 */
public function getBirthday(): \DateTime
{
    return $this->birthday;
}

/**
 * @param \DateTime $birthday
 */
public function setBirthday(\DateTime $birthday)
{
    $this->birthday = $birthday;
}

/**
 * @return string
 */
public function getMobilePhone(): string
{
    return ($this->mobilePhone == null) ? '' : $this->mobilePhone;
}

/**
 * @param string $mobilePhone
 */
public function setMobilePhone(string $mobilePhone)
{
    $this->mobilePhone = $mobilePhone;
}

}

这就是问题所在。我们看到 Worker 子类的属性出现在 User 类的模型中。并且当我测试发送 POST 方法时,它会返回一个包含工作线程实体属性的用户实体

共有1个答案

司空和悌
2023-03-14

您的序列化需要更深一层,以支持在响应中序列化的worker属性。我不确定如何具体地让它为您的实现工作。

对于JMS Serialization捆绑包,它看起来如下:

/**
 * Get the Birthday..
 *
 * @MaxDepth(2)
 * @return \DateTime
 */
public function getBirthday(): \DateTime
{
    return $this->birthday;
}
 类似资料:
  • 问题内容: 我正在编写一个流畅的API,以配置和实例化一系列“消息”对象。我有消息类型的层次结构。 为了在使用Fluent API时能够访问子类的方法,我使用了泛型来对子类进行参数化,并使所有的fluent方法(以“ with”开头)都返回泛型类型。注意,我省略了流利方法的大部分内容。其中进行了许多配置。 具体的子类类似地重新定义泛型。 该代码有效,即,我可以实例化任何类并使用所有流利的方法: 以

  • 我有一个名为内容的实体类型。 实体类型具有一对一关系。 SurveyData 实体实际上是一个映射的超类。它最终将有几十个用于存储来自不同调查数据的实体子类。 根据文档,我创建了一个自定义规范化器,它基于键处理非规范化: 有了这个,我可以完美地创建一个嵌入了SurveyData的新提交。下面是我发送给POST请求的JSON示例: 但是,当我通过 GET 获取集合或单个提交实体时,API 平台返回的

  • 问题内容: 我有一个实体类和一个基于该实体的子类: 和 我需要发出仅在基类(A)上使用存储过程的本机查询。如果我尝试如下: 我收到有关“在ResultSet中未找到clazz_列”的错误。我假设JPA提供程序添加了此列,以便区分基类和扩展类。我可以通过显式添加clazz列和子类中的所有字段来解决此问题: 其中“ prop1”和“ prop2”是子类B的属性。但是,这似乎是不必要的修改,并且如果子类

  • 如何使用NamedQuery在jointable上查找实体?我有一个抽象的父类/实体,带有@heritance(strategy=InheritanceType.JOINED)和两个子类/子实体。因此,在数据库中我有一个父表(SDR)和两个子表(xSdrs和ySdrs)。还有另一个表保留,它与表SDR有多对多关系。这就是为什么我在保留和特别提款权之间创建了一个连接表 我打算在父实体Sdr中使用Na

  • 以此作为我的基点:https://vladmihalcea.com/the-best-way-to-map-a-many-to-many-association-with-extra-columns-when-using-jpa-and-hibernate/ 我有一个名为 Attendance 的实体,它有一个 emebedid AttendacneId,它有两列 lectureId (strin

  • 你更喜欢/建议哪一个?