Сериализация entiy со свойством, ссылающимся на сущность того же типа? - PullRequest
1 голос
/ 11 апреля 2020

У меня есть объект, у которого есть свойство, которое указывает на другой объект того же типа, например duplicatedFrom для объекта, который помечен как дубликат существующего объекта.

Класс объекта является чем-то вроде this:

class Foo
{
    private string $id;
    private string $name;
    private string $content;
    private ?Foo duplicatedFrom;
}

Мне бы хотелось, чтобы возвращаемый результат был примерно таким:

{
   "@id": "/api/foo/2",
   "@type": "Foo",
   "name": "bar",
   "content": "abce",
   "duplicatedFrom": "/api/foo/1"
}

Но вместо этого я получаю:

{
   "@id": "/api/foo/2",
   "@type": "Foo",
   "name": "bar",
   "content": "abce",
   "duplicatedFrom": {
      "@id": "/api/foo/1",
      "@type": "Foo",
      "name": "bar",
      "content": "abce",
      "duplicatedFrom": null
   }
}

Ссылка на сущность от Foo::duplicatedFrom полностью сериализован, где я хотел бы добавить его только со значением id, а не со всей сущностью.

Я играл с конфигурацией сериализатора, установив max-depth для duplicatedFrom либо 0 или 1, но результаты совпадают.

Применяемая группа сериализатора:

<serializer xmlns="http://symfony.com/schema/dic/serializer-mapping">
    <class name="Foo">
        <!-- rest of the declaration omitted -->
        <!-- tried with max-depth 1 and 0 -->
        <attribute name="duplicatedFrom" max-depth="1">
            <group>foo_item</group>
            <group>foo_collection</group>
       </attribute>
  </class>
</serializer>

Конфигурация ресурса API:

<resources xmlns="https://api-platform.com/schema/metadata">
    <resource class="Foo">
    <attribute name="normalization_context">
       <attribute name="groups">
            <attribute>foo_collection</attribute>
       </attribute>
    </attribute>
</resource>

Как мне это сделать sh? 1028 *

...