【问题标题】:Loopback where filter not working inside include内部过滤器不起作用的环回包括
【发布时间】:2020-10-14 23:38:36
【问题描述】:

我写了这个过滤器,我将传递给我用 Loopbackjs 编写的端点。

  const filter = {
            where: { status: { neq: "processed" } },
            include: [
                { relation: "vendor", scope: { fields: ["id", "name"] } },
                {
                    relation: "pickupLocation",
                    scope: { where: { cityId: "5ee134da0138634c27a6e1dd" } },
                },
            ],
            limit: 200,
            skip: 0
        };
        return this.http.get<IPickupRequest[]>(
            `${environment.url}/PickupRequests?filter=${encodeURIComponent(
                JSON.stringify(filter)
            )}`
        );

pickupRequest 集合包含与pickupLocation 集合的belongsTo 关系。 PickupLocation 集合包含一个名为 cityId 的属性,我试图在该属性上应用 where 子句,但它不起作用。此外,我还想在pickupRequest 对象中获取pickupLocation 的字段,以便在我的表中使用它们。简单的包含完美地工作并根据需要显示数据,但是当应用where 子句时,它就不起作用,并且只显示pickupRequest 对象,但不包括其中的pickupLocation 数据。此外,由于我使用分页,我需要它每次准确地返回 200 条记录。难道我做错了什么?这里的确切问题是什么?我正在使用环回 3

【问题讨论】:

  • 任何帮助将不胜感激

标签: loopbackjs loopback angular-loopback


【解决方案1】:

在这里,您期望应用于pickupLocation 关系的where 过滤器的作用类似于SQL 的内连接。但是,在环回中,每当您在查询中执行 include 时,框架都会在内部对每个模型的集合或表进行两个单独的查询并将它们组合起来;有效地使它像 SQL 的左外连接一样工作。因此,在上述查询中,PickupRequest 列表将包含所有对象,而与 pickupLocation 模型上的过滤位置无关。 pickupLocation 关系只会出现在那些PickupRequest 记录中,其中cityId = "5ee134da0138634c27a6e1dd" 和其余位置,关系将是null 对象。

为了克服这个问题,我想说的是,根据{ cityId: "5ee134da0138634c27a6e1dd" } where 过滤器对pickupLocation 模型进行主要查询,并包含PickupRequest 模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 2019-04-09
    • 2018-05-19
    • 2018-02-27
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多