loopback关系数据库hasManyThrough数据透视表

mbo*_*las 6 node.js strongloop loopbackjs

我似乎陷入了经典的ORM问题,并且不知道如何处理它,所以在这一点上欢迎任何帮助.

有没有办法在hasManyThrough查询上获取数据透视表?更好的是,应用一些过滤器或排序.一个典型的例子

表产品

id,title
Run Code Online (Sandbox Code Playgroud)

表类别

id,title
Run Code Online (Sandbox Code Playgroud)

table products_categories

productsId, categoriesId, orderBy, main
Run Code Online (Sandbox Code Playgroud)

因此,在上面的场景中,假设您希望获得(main = true)的所有类别的产品X,或者您希望按类别对产品类别进行排序orderBy.

现在会发生什么是第一SELECT的产品,以获得产品数据,第二SELECT对products_categories获得categoriesId和最终SELECT的类别,以获得实际的类别.理想情况下,过滤器和排序应该适用于第二SELECT

SELECT `id`,`productsId`,`categoriesId`,`orderBy`,`main` FROM `products_categories` WHERE `productsId` IN (180) WHERE main = 1 ORDER BY `orderBy` DESC
Run Code Online (Sandbox Code Playgroud)

另一个典型的例子是希望根据用户想要的订单来订购产品图像

所以你会有一个products_images表

id,image,productsID,orderBy
Run Code Online (Sandbox Code Playgroud)

你会想要的

SELECT from products_images WHERE productsId In (180) ORDER BY orderBy ASC
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

编辑:这是中间表根据我的架构获得我需要的内容所需的关系.

Products.hasMany(Images,
    {
        as: "Images",
        "foreignKey": "productsId",
        "through": ProductsImagesItems,
        scope: function (inst, filter) {
            return {active: 1};
        }
    });
Run Code Online (Sandbox Code Playgroud)

事情是范围功能让我访问最终结果而不是中间表.

Ove*_*ivr 4

我不确定是否完全理解您的问题,但可以肯定您需要摆脱表格概念并用模型和关系来表达您的问题。

在我看来,您有两个模型 Product(properties: title) 和 Category (properties: main)。

然后,您可以在两者之间建立关系,潜在地

  • Product belongsTo Category
  • Category hasMany Product

这意味着一个产品将属于一个类别,而一个类别可能包含许多产品。还有其他可用关系

然后,使用生成的 REST API,您可以过滤 GET 请求以根据其属性获取项目(如main您的情况),或者使用自定义 GET 请求(在添加关系时自动生成)来获取例如属于某个产品的所有产品。具体类别。

这有帮助吗?