Некоторые отношения OneToMany возвращаются как объекты, а некоторые как IRI - API-платформа.

Я хотел бы включить связанные вопросы и группы вопросов в список IRI при получении запроса на форму.

У меня несколько сущностей:

  • Форма (поля: группы вопросов, вопросы)
  • QuestionGroup (поля: форма, вопросы)
  • Вопрос (поля: форма, группа_вопросов)

Когда я делаю запрос на получение формы, он возвращает:

  • Form
    • questions ['/api/questions/1',...]
    • questionGroups [{id: 1, name: 'foo', questions: ['/ api / questions / 1', ...] ...}, ...]

Как видите, Form.questions - это список IRI, а Form.questionGroups - это список объектов. Я бы хотел, чтобы они оба были МРИ.

На изображении ниже под полем 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;
}

person Erik Kubica    schedule 04.10.2019    source источник


Ответы (1)


Я понял, что если поле / свойство Entity имеет значение snake_case, например «$ question_groups», то API вернет его как список объектов, а если его camelCase, например, «$ questionGroups», он будет возвращен как список IRI. Боковое примечание: normalisationContext не любит snake_case. если вы используете normalisationContext и свойство snake_cased, то оно не будет включено в данные ответа.

person Erik Kubica    schedule 04.10.2019