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();
  },