Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony5 -只从实体中恢复几个字段

Symfony5 -只从实体中恢复几个字段
EN

Stack Overflow用户
提问于 2020-12-04 05:39:00
回答 2查看 255关注 0票数 1

我想要创建一个路由,它将返回我的一个实体的列表,其中只有一些字段。

我认为它可以通过序列化组来实现,但也许这不是最简单的方法。

因此,我想简单地添加一个名为special_get的新的自定义路由,以便对normalization_group user:special进行测试,如下所示:

代码语言:javascript
运行
AI代码解释
复制
/**
 * @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应用于我希望返回的几个字段:

代码语言:javascript
运行
AI代码解释
复制
    /**
     * @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,上面写着:

代码语言:javascript
运行
AI代码解释
复制
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.*

有没有人知道这个错误是从何而来的?

或者,如果有更好的方法来实现只恢复几个字段,在一个特殊的路径上形成一个实体?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-04 06:32:20

因此,关于错误消息,您的问题是order属性中的orders由availabilities.start属性导致,而该属性没有添加到您的规范化组中。

所以你必须在这里找到方法:

  • availabilities属性添加到规范化组
  • 删除此属性

据我所知,api-platform目前不支持为每个操作排序属性,似乎不应该

票数 1
EN

Stack Overflow用户

发布于 2022-06-29 02:10:43

您可以使用PropertyFilter,以便选择特定的字段

启用过滤器:

代码语言:javascript
运行
AI代码解释
复制
* @ApiFilter(PropertyFilter::class)

导入类use ApiPlatform\Core\Serializer\Filter\PropertyFilter;

现在,您可以使用以下查询筛选序列化属性:

代码语言:javascript
运行
AI代码解释
复制
?properties[]=title&properties[]=shortDescription

您可以根据需要添加任意数量的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65144601

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档