Strapi,使用 find 检查对象类型字段是否在其中一个属性中具有匹配项
Strapi, use find to check if an object type field has a match in one of the properties
假设我有一个名为 user
的字段,其数据看起来像这样
{
"id": "abc123",
"name": "John Smith"
}
我想创建一条路线,在那里我可以找到 user.id
等于 abc123
并且应该 return 具有上述 ID 的用户的博客
我试过
async findByUser(ctx) {
let blogs = await strapi.services.blogs.find({
user: {id:ctx.params.id},
return blogs;
},
但这似乎不起作用,因为它 return 是一个空数组并且没有专门在 id
属性 中搜索。我如何使用 strapi 执行此操作?
编辑:用户不是关系,它是一个单独的 JSON 字段。
好的,要查询 JSON
对象 属性,您需要编写自定义查询。看下面的例子。
PostGreSQL 的实现
async findByUser(ctx) {
const response = await strapi
.query('blogs')
.model.query((qb) => {
qb.where('user', '@>', `{"id": "${ctx.params.id}" }`);
// qb.where('user', '@>', `{"name": "${ctx.params.name}" }`);
})
.fetch();
return response.toJSON();
},
SQLite 的实现
async findByUser(ctx) {
const response = await strapi
.query('blogs')
.model.query((qb) => {
qb.where('user', 'LIKE', `%"id":"${ctx.params.id}"%`);
})
.fetch();
return response.toJSON();
},
P.S: 为了保持一致性,只需使用 fetch
而不是 fetchAll
。
您好,感谢 Salvino 的帮助,我想我能够找到解决方案
async findByUser(ctx) {
const response = await strapi
.query('blogs')
.model.query((qb) => {
qb.where('user', 'LIKE', `%"id":"${ctx.params.id}"%`);
})
.fetchAll();
return response.toJSON();
},
假设我有一个名为 user
的字段,其数据看起来像这样
{
"id": "abc123",
"name": "John Smith"
}
我想创建一条路线,在那里我可以找到 user.id
等于 abc123
并且应该 return 具有上述 ID 的用户的博客
我试过
async findByUser(ctx) {
let blogs = await strapi.services.blogs.find({
user: {id:ctx.params.id},
return blogs;
},
但这似乎不起作用,因为它 return 是一个空数组并且没有专门在 id
属性 中搜索。我如何使用 strapi 执行此操作?
编辑:用户不是关系,它是一个单独的 JSON 字段。
好的,要查询 JSON
对象 属性,您需要编写自定义查询。看下面的例子。
PostGreSQL 的实现
async findByUser(ctx) {
const response = await strapi
.query('blogs')
.model.query((qb) => {
qb.where('user', '@>', `{"id": "${ctx.params.id}" }`);
// qb.where('user', '@>', `{"name": "${ctx.params.name}" }`);
})
.fetch();
return response.toJSON();
},
SQLite 的实现
async findByUser(ctx) {
const response = await strapi
.query('blogs')
.model.query((qb) => {
qb.where('user', 'LIKE', `%"id":"${ctx.params.id}"%`);
})
.fetch();
return response.toJSON();
},
P.S: 为了保持一致性,只需使用 fetch
而不是 fetchAll
。
您好,感谢 Salvino 的帮助,我想我能够找到解决方案
async findByUser(ctx) {
const response = await strapi
.query('blogs')
.model.query((qb) => {
qb.where('user', 'LIKE', `%"id":"${ctx.params.id}"%`);
})
.fetchAll();
return response.toJSON();
},