gpt4 book ai didi

php - API 平台 : Normalizing a Mapped Superclass only includes properties from the superclass, 不是子类

转载 作者:行者123 更新时间:2023-12-04 12:02:30 25 4
gpt4 key购买 nike

编辑:用一个简单的用例创建了一个 repo 来复制问题,并在 API 平台问题队列中创建了一个问题 https://github.com/api-platform/api-platform/issues/1648 .
我有一个 SurveyData映射父类(super class),它有多个实现它的子类。对于这个问题,MonthlyDataSurveyData 的 child 父类(super class)。
我有一个 Submission具有 OneToOne 的 API 资源与 SurveyData 的关系.
我正在尝试规范化 SurveyData当我检索它时,子实体(在本例中为 MonthlyData 实体)内联到我的提交实体中。我已经设置了 normalizationContext在我的 SubmissionApiResource注释,并设置 @Groups我想要内联的各种属性的注释。
它主要工作,因为我的 SurveyData 的属性映射的父类(super class)出现在我的 Submission 中实体,除了 @id@type JSON-LD 属性。 但是,来自实际子实体 ( MonthlyTotals ) 的属性不会出现。
我可以确认传递给规范化器的对象是完全填充的 MonthlyTotals对象,但规范化器的输出仅包含 SurveyData 中定义的属性映射的父类(super class)。
我可以确认我正在使用默认的核心 API 平台 JSON-LD 规范器。
预先感谢您的任何帮助!
这是一个 Submission定义(为简洁起见,减去“使用”语句和 getter/setter:

<?php
/**
* @ApiResource(
* normalizationContext={"groups"={"submission"}},
* denormalizationContext={"groups"={"submission"}},
* itemOperations={
* "get"={
* "method"="GET",
* "access_control"="is_granted('view', object)",
* },
* "put", "patch", "delete",
* },
* )
*
* @ApiFilter(NumericFilter::class, properties={"patient.id"})
* @ApiFilter(OrderFilter::class, properties={"created", "status", "patient.chartID"}, arguments={"orderParameterName"="order"})
* @ApiFilter(SearchFilter::class, properties={"status": "exact", "patient.chartID": "exact"})
* @ORM\Entity(repositoryClass="App\Repository\SubmissionRepository")
* @DelphiAssert\SubmissionDataIsValid
*/
class Submission
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups({"submission"})
*/
private $id;

/**
* @ORM\ManyToOne(targetEntity="App\Entity\Facility")
* @ORM\JoinColumn(nullable=false)
* @Groups({"submission"})
*/
private $facility;

/**
* @ORM\ManyToOne(targetEntity="App\Entity\Patient", inversedBy="submissions")
* @Groups({"submission"})
*/
private $patient;

/**
* @ORM\Column(type="string", length=255)
* @Groups({"submission"})
*/
private $survey;

/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"submission"})
*/
private $dateDetail;

/**
* @ORM\Column(type="datetime")
* @Assert\Type("\DateTimeInterface")
* @Groups({"submission"})
*/
private $created;

/**
* @ORM\Column(type="datetime")
* @Assert\Type("\DateTimeInterface")
* @Groups({"submission"})
*/
private $updated;

/**
* @ORM\Column(type="string", length=255)
* @Groups({"submission"})
*/
private $user;

/**
* @ORM\Column(type="string", length=255)
* @Groups({"submission"})
*/
private $status;

/**
* @ORM\OneToOne(targetEntity="App\Entity\SurveyData\SurveyData", inversedBy="submission", cascade={"persist", "remove"}, orphanRemoval=true, fetch="EAGER")
* @Groups({"submission"})
*/
private $surveyData;
这是SurveyData(相同条件):
<?php
/**
* @ORM\Entity(repositoryClass="App\Repository\SurveyData\SurveyDataRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({
* "SurveyData" = "App\Entity\SurveyData\SurveyData",
* "RPCSEducationProcessMeasures" = "App\Entity\SurveyData\RPCS\EducationProcessMeasures",
* "RPCSMonthlyTotals" = "App\Entity\SurveyData\RPCS\MonthlyTotals"
* })
*/
class SurveyData
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $id;

/**
* @ORM\OneToOne(targetEntity="App\Entity\Submission", mappedBy="surveyData", cascade={"persist", "remove"}, fetch="EAGER")
*/
private $submission;
这是 MonthlyData:
/**
* @ApiResource(
* normalizationContext={"groups"={"submission"}},
* denormalizationContext={"groups"={"submission"}}
* )
* @ORM\Entity(repositoryClass="App\Repository\SurveyData\RPCS\MonthlyTotalsRepository")
*/
class MonthlyTotals extends SurveyData
{

/**
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $num_deliveries;

/**
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $num_cesarean;

/**
* @ORM\Column(type="integer")
* @Groups("submission")
*/
private $num_epidural_anesthesia;

最佳答案

可能是 @Groups({"submission"}) v. @Groups("submission") .
全部改为@Groups({"submission"}) .
很难用当前的文档进行验证,因为它现在使用 PHP8 属性进行了记录。我只使用了 YAML 配置,所以不能 100% 确定。

关于php - API 平台 : Normalizing a Mapped Superclass only includes properties from the superclass, 不是子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63713698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com