【问题标题】:How to deep fetch In Strapi cms compnents?如何在 Strapi cms 组件中深度获取?
【发布时间】:2021-12-15 10:59:30
【问题描述】:

我有以下来自 Strapi cms 的用户 API,我想深入获取地址组件(可重复组件)。

所以,我要获取的是地址为63 Southlands Road的用户...我尝试了很多方法:

  • 尝试了 Strapi 内置查询

http://localhost:1337/users?address.info=63%20Southlands%20Road

  • 尝试了自定义查询:

     const result = await strapi
       .query("user")
       .model.query((qb) => {
         qb.where("address.info", "63 Southlands Road");
       })
       .fetch();
    

以上所有这些消息都没有解决,我用完了选项。这在 Strapi 中是否可行...如果不是,我正在尝试切换到节点服务器。

【问题讨论】:

    标签: node.js database content-management-system strapi bookshelf.js


    【解决方案1】:

    Strapi 中,无法直接根据嵌套组件数据查询模型。但是您可以改用原始查询来查询组件数据并获得所需的结果。表名称基于上下文中的模型名称,因为 Strapi 遵循此特定命名约定,并在您在管理员中创建 content-types 时自动创建表。

    命名约定后跟Strapi

    如果您创建一个名为user 的模型并在其中创建两个组件,例如addresslocation,那么Strapi 将创建如下4 个表:

    1. users - 这是实际存储模型数据的表
    2. users_components - 此表存储用户模型对每条记录的所有组件的映射
    3. components_users_address - 此表将存储有关链接到 user 模型的所有 address 组件的数据
    4. components_users_location - 该表将存储有关链接到user 模型的所有location 组件的数据

    您可以通过pg-adminphp-myadmin 打开项目数据库来交叉检查表名。

    解决方案
    let result = await strapi.connections.default.raw(
    "SELECT u.*
     FROM users u
     LEFT JOIN users_components uc
     ON (uc.user_id = u.id AND uc.component_type='components_users_address' AND uc.field='address')
     LEFT JOIN components_users_address cua ON (cua.id = uc.component_id)
     WHERE AND cua.ifno LIKE '63 Southlands Road'");
    console.log(result);
    

    P.S:我只在 MySQLPostGreSQL 尝试过这个

    【讨论】:

    • 感谢您的回答!但我的用户是一个模型,而不是一个组件......只有地址是一个组件。我的 pg-admin 中没有 users_components? users_components 来自哪里?
    • 是的,这是 Strapi 在后台生成表格时遵循的命名约定,同时您在管理员中创建 content-types。因此,如果您的模型是users,并且您在该模型中有一个组件,那么它将创建表为 1。users:模型 2.users_components:这将基本上存储用户模型具有的所有组件的映射对于每个条目 3.components_users_address:这是实际的组件表,将存储地址数据。如果您再创建一个名为 location 的组件,那么将有一个名为 components_users_location 的表
    • @MaiRich 我已经更新了我的答案以更好地解释这一点。
    • 谢谢兄弟,这工作得很好。
    • 很高兴听到这个消息.. Chao!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2011-11-06
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多