繁体   English   中英

如何在查询中包含自定义 SELECT

[英]How can I include custom SELECTs in my queries

对于我目前正在制作的博客网站,我需要从数据库中检索最近的文章以在博客的主页上显示它们。 我不想检索所有 10 篇文章的内容,而是检索它们的开头。

在Postgres里,我会发现所有的文章,您可以按照一个created_at领域,并SELECT与内容SELECT left(content, 15)让我的文章内容的第15个字符。

如何使用 Prisma 实现这一目标?

我试过了

  return prisma.article.findMany({
    orderBy: {
      createdAt: 'desc',
    },
    select: {
      createdAt: true,
      id: true,
      title: true,
      updatedAt: true,
      content: 'left(content, 15)' as any
    },
  });

但它告诉我它需要一个布尔值而不是字符串。

谢谢你的帮助。

您可以按照 Ryan在这里建议的操作(第二个建议是您引入一个新字段,可能是像excerpt类的excerpt ),或者您可以像这样执行原始查询

import { Article } from '@prisma/client';

type CustomArticle = Pick<Article, 'id' | 'title' | 'content' | 'createdAt' | 'updatedAt'>;

const prisma = /* your prisma client */
const result = await prisma.$queryRaw<CustomArticle[]>`SELECT id, title, LEFT(content, 15) as content, createdAt, updatedAt FROM Article;`

您可以这样做,但我建议您引入一个新字段,因为LEFT(content, 15)仍将获取整个内容,但会删除第 15 个字符之后的所有内容。

在这个例子中,我使用 TypeScript 来确定$queryRaw的泛型类型参数T和一个CustomArticle ,它只选择我们需要的相关信息,以便我们可以有一个类型化的返回值。

Prisma 目前无法直接实现这一点,因此有两种解决方法:

  1. 获取内容,然后只在前端显示前 15 个字符。

  2. 创建只是持有的前15个字符另一个字段content ,并选择相应的字段。

我们在这里有一个请求,所以如果你能为此添加一个 👍 以便我们可以查看优先级,那就太好了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM