如何根据模型在 Strapi 中的关系查询模型



希望你们都度过美好的一天! :) 我试图用谷歌搜索我的问题,但永远无法得到一个工作的例子。

我有一个项目模型。项目与模型成员具有1:n关系。 如果我使用:

strapi.query('project').find({id: 1});

我得到:

{ id: 1, name: 'Project 1', members: [...]}

所以基本上我能够通过它的ID找到一个项目,并得到它的成员列表。

但是我将如何获取属于 ID = 1 的项目的所有成员的列表?

strapi.query('member').find(...);
strapi.query('member').search(...);

我得到的最接近的是使用:

strapi.query('member').search({_q: 'Project Name'});

然而,这还不够接近。 这更像是一种解决方法。 我真的很希望能够通过使用项目的ID 以干净的方式做到这一点。 谁能帮助或指出我正确的方向? 任何例子都非常感谢! 谢谢! :)

最好的方法是:

strapi.query('member').find({name:'','project.id':id});

以上是并找到

strapi.query('member').find({name:''},['project.id',id]);

以上是或找到

您可以在项目/控制器/项目中添加自定义控制器函数.js

getMembers: async ctx => {
const {id} = ctx.params; 
const project = await strapi.services.project.findOne({id});

return project ? project.members : [];
}

请确保公开路由。在project/config/routes.json中添加以下内容

{
"method": "GET",
"path": "/projects/get-members/:id",
"handler": "project.getMembers",
"config": {
"policies": []
}
},

您还可以将"path"属性更改为适合您需要的任何属性。

Strapi v4中,使用 entityService:

strapi.entityService.findMany('api::member.member', {        
filters: {
project: {
id: 1
}
}
});

如果要在每条记录中添加项目的详细信息:

strapi.entityService.findMany('api::member.member', {        
filters: {
project: {
id: 1
}
},
populate: {
project: true
}
});

最新更新