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

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

У меня есть несколько объектов:

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

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

  • Форма
    • вопросы ['/api/questions/1',...]
    • questionGroups [{id: 1, name:' foo', questions: [' /api/questions/1',...]... отпуска ,...]

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

На изображении ниже под полем questionGroups есть поле questionGroup, но в поле вопросов или ответов под ответами нет поля ...

enter image description here

Все это не имеет смысла для меня, я пытался установить @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;
}

1 Ответ

0 голосов
/ 04 октября 2019

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

...