首页 > 解决方案 > 内部过滤器不起作用的环回包括

问题描述

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

标签: loopbackjsloopbackangular-loopback

解决方案


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

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


推荐阅读