希望你们都度过美好的一天! :) 我试图用谷歌搜索我的问题,但永远无法得到一个工作的例子。
我有一个项目模型。项目与模型成员具有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
}
});