首页 > 解决方案 > 一些 OneToMany 关系作为对象返回,一些作为 IRI - API-Platform

问题描述

当我向表单提出获取请求时,我想将相关问题和问题组作为 IRI 列表。

我有几个实体:

当我对表单提出获取请求时,它返回:

如您所见,Form.questions 是 IRI 列表,但 Form.questionGroups 是对象列表。我希望将它们都用作 IRI。

在下图中的 questionGroups 字段下有一个 questionGroup 字段,但在问题下没有问题字段或在答案下没有答案,...

在此处输入图像描述

整件事对我来说毫无意义,我试图设置@MaxDepth,它什么也没改变(除非我使用@MaxDepth(0) 抛出500错误而没有任何错误消息作为响应或在php日志中)

谁能解释为什么,我应该怎么做才能将问题和问题组加载为 IRI 列表?

谢谢

以下是上述实体的相关部分。

/**
 * @ORM\Entity
 * @ApiResource
 * @ORM\HasLifecycleCallbacks
 * @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false, hardDelete=true)
 */
class Form
{
    /**
     * @ORM\Column(type="text", length=200, nullable=false)
     */
    private $name;
    /**
     * @ORM\OneToMany(targetEntity="QuestionGroup", mappedBy="form", cascade={"REMOVE"})
     */
    private $question_groups;
    /**
     * @ORM\OneToMany(targetEntity="Question", mappedBy="form", cascade={"REMOVE"})
     */
    private $questions;


}

/**
 * @ORM\Entity
 * @ApiResource
 * @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false, hardDelete=true)
 */
class QuestionGroup
{
    /**
     * @ORM\Column(type="string", length=200, nullable=false)
     */
    private $name;
    /**
     * @ORM\ManyToOne(targetEntity="Form",inversedBy="question_groups")
     */
    private $form;
    /**
     * @ORM\OneToMany(targetEntity="Question", mappedBy="question_group", cascade={"REMOVE"})
     */
    private $questions;
}

/**
 * @ORM\Entity
 * @ApiResource
 * @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false, hardDelete=true)
 */
class Question
{
    /**
     * @ORM\Column(type="string", length=200, nullable=false)
     */
    private $name;
    /**
     * @ORM\ManyToOne(targetEntity="Form",inversedBy="questions")
     */
    private $form;
    /**
     * @ORM\ManyToOne(targetEntity="QuestionGroup", inversedBy="questions")
     */
    private $question_group;
}

标签: symfonyapi-platform.com

解决方案


我发现如果实体字段/属性是像“$question_groups”这样的snake_case,那么API 会将其作为对象列表返回,如果它的camelCase 像“$questionGroups”,它将作为IRI 列表返回。旁注: normalisationContext 不喜欢snake_case。如果您使用 normalisationContext 并且该属性是snake_cased,则它将不包含在响应数据中。


推荐阅读