如何在 Strapi cms 组件中深度获取?
How to deep fetch In Strapi cms compnents?
我有来自 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 中是否可行...如果不行,我正在尝试切换到节点服务器。
在Strapi
中无法直接查询基于嵌套组件数据的模型。但是您可以改用原始查询来查询组件数据并获得所需的结果。 table 名称基于上下文中的模型名称,因为 Strapi
遵循此特定命名约定,并在您在管理中创建 content-types
时自动创建 table。
命名约定后跟Strapi
如果您创建一个名为 user
的模型并在其中创建两个组件,例如 address
和 location
,那么 Strapi
将创建 4 个 table如下:
- users - 这是实际存储模型数据的table
- users_components - 此 table 存储用户模型对每个记录的所有组件的映射
- components_users_address - 此 table 将存储有关链接到
user
模型 的所有 address
组件的数据
- components_users_location - table 将存储有关链接到
user
模型 的所有 location
组件的数据
您可以通过 pg-admin
或 php-myadmin
打开项目数据库来交叉检查 table 名称。
解决方案
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:我只在 MySQL
和 PostGreSQL
中尝试过
我有来自 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 中是否可行...如果不行,我正在尝试切换到节点服务器。
在Strapi
中无法直接查询基于嵌套组件数据的模型。但是您可以改用原始查询来查询组件数据并获得所需的结果。 table 名称基于上下文中的模型名称,因为 Strapi
遵循此特定命名约定,并在您在管理中创建 content-types
时自动创建 table。
命名约定后跟Strapi
如果您创建一个名为 user
的模型并在其中创建两个组件,例如 address
和 location
,那么 Strapi
将创建 4 个 table如下:
- users - 这是实际存储模型数据的table
- users_components - 此 table 存储用户模型对每个记录的所有组件的映射
- components_users_address - 此 table 将存储有关链接到
user
模型 的所有 - components_users_location - table 将存储有关链接到
user
模型 的所有
address
组件的数据
location
组件的数据
您可以通过 pg-admin
或 php-myadmin
打开项目数据库来交叉检查 table 名称。
解决方案
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:我只在 MySQL
和 PostGreSQL