Symfony5 - 仅从实体中恢复几个字段
Symfony5 - recovering only a few fields from an entity
我想创建一个路由,它将 return 我的一个实体的列表,其中只有其中的一些字段。
我认为这可以通过序列化组来实现,但这可能不是最简单的方法。
所以我想简单地添加一个新的自定义路由,称为 special_get
以使用 normalization_group
user:special
进行测试,如下所示:
/**
* @ApiResource(
* attributes={
* "normalization_context"={"groups"={"user:read", "user:list", "user:special"}},
* "denormalization_context"={"groups"={"user:write"}},
* "order"={"availabilities.start": "ASC"}
* },
* collectionOperations={
* "get"={
* "mehtod"="GET",
* "security"="is_granted('ROLE_USER')",
* "normalization_context"={"groups"={"user:list"}},
* },
* "special_get"={
* "method"="GET",
* "path"="/user/specialroute",
* "normalization_context"={"groups"={"user:special"}}
* },
* }
* )
* @ORM\Entity(repositoryClass=UserRepository::class)
*/
并将此 group
仅应用于我想要的几个字段 return :
/**
* @ORM\Column(type="boolean")
* @Groups({"user:read", "user:list", "user:write", "user:special"})
*/
private $firstName;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"user:write", "user:read", "user:list", "user:special"})
*/
private $photo;
/**
* @ORM\OneToMany(targetEntity=Availability::class, mappedBy="entityname", cascade={"remove"})
* @Groups({"user:read", "user:list", "user:write"})
* @ApiSubresource()
*/
private $availabilities;
这确实按照我的意愿在 swagger 界面上创建了一条新路由,但我得到一个 500
说:
An error occured
Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers.*
有人知道这个错误可能来自哪里吗?
或者是否有更好的方法来实现在特殊路由上仅恢复几个字段形成一个实体?
谢谢!
因此,关于错误消息,您的问题出在 order
属性中,该属性按 availabilities.start
属性 排序结果,但未添加到您的规范化组中。
所以你必须在这里:
- 将
availabilities
属性添加到归一化组
- 删除此属性
据我所知,api-平台目前不支持每个操作的排序属性,seems it shouldn't。
我想创建一个路由,它将 return 我的一个实体的列表,其中只有其中的一些字段。
我认为这可以通过序列化组来实现,但这可能不是最简单的方法。
所以我想简单地添加一个新的自定义路由,称为 special_get
以使用 normalization_group
user:special
进行测试,如下所示:
/**
* @ApiResource(
* attributes={
* "normalization_context"={"groups"={"user:read", "user:list", "user:special"}},
* "denormalization_context"={"groups"={"user:write"}},
* "order"={"availabilities.start": "ASC"}
* },
* collectionOperations={
* "get"={
* "mehtod"="GET",
* "security"="is_granted('ROLE_USER')",
* "normalization_context"={"groups"={"user:list"}},
* },
* "special_get"={
* "method"="GET",
* "path"="/user/specialroute",
* "normalization_context"={"groups"={"user:special"}}
* },
* }
* )
* @ORM\Entity(repositoryClass=UserRepository::class)
*/
并将此 group
仅应用于我想要的几个字段 return :
/**
* @ORM\Column(type="boolean")
* @Groups({"user:read", "user:list", "user:write", "user:special"})
*/
private $firstName;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"user:write", "user:read", "user:list", "user:special"})
*/
private $photo;
/**
* @ORM\OneToMany(targetEntity=Availability::class, mappedBy="entityname", cascade={"remove"})
* @Groups({"user:read", "user:list", "user:write"})
* @ApiSubresource()
*/
private $availabilities;
这确实按照我的意愿在 swagger 界面上创建了一条新路由,但我得到一个 500
说:
An error occured
Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers.*
有人知道这个错误可能来自哪里吗?
或者是否有更好的方法来实现在特殊路由上仅恢复几个字段形成一个实体?
谢谢!
因此,关于错误消息,您的问题出在 order
属性中,该属性按 availabilities.start
属性 排序结果,但未添加到您的规范化组中。
所以你必须在这里:
- 将
availabilities
属性添加到归一化组 - 删除此属性
据我所知,api-平台目前不支持每个操作的排序属性,seems it shouldn't。