带'insensitive'模式的Prisma查询无法正常工作
请提供需要格式化的具体内容,我会按照你指定的Markdown规则进行处理。
(若你是要处理之前的代码与问题内容,以下是格式化后的完整解答)
问题描述
数据库中存在名为Cheez的披萨,但发起请求 http://localhost:3000/api/product/search?query=cheez 时,接口仅返回空数组[],更新prisma@client也未解决该问题。
相关代码
import { prisma } from '@/prisma/prisma-client'; import { NextRequest, NextResponse } from 'next/server'; export async function GET(req: NextRequest) { const query: string = req.nextUrl.searchParams.get('query') || ''; try { console.log(`Search query: '${query}'`); // Prisma 查询 const products = await prisma.product.findMany({ where: { name: { contains: query, mode: 'insensitive', }, }, }); return NextResponse.json(products); } catch (error) { console.error('Error executing query:', error); return NextResponse.json({ error: 'An error occurred' }, { status: 500 }); } }
排查与解决方法
直接验证数据库数据
用SQL客户端执行查询确认数据是否存在:SELECT * FROM Product WHERE LOWER(name) LIKE LOWER('%cheez%');如果查不到结果,说明数据库内的记录名称存在拼写差异(比如实际是
Cheese)或数据未正确写入。测试大小写匹配逻辑
部分数据库(如SQLite)对mode: 'insensitive'的支持有限,可手动转换大小写测试:const products = await prisma.product.findMany({ where: { OR: [ { name: { contains: query } }, { name: { contains: query.toUpperCase() } }, { name: { contains: query.toLowerCase() } }, ], }, });检查Prisma Schema与客户端生成
确保Product模型的name字段为String类型且无特殊约束:model Product { id Int @id @default(autoincrement()) name String // 其他字段 }修改Schema后需重新生成客户端:
npx prisma generate确认请求参数传递
检查控制台输出的Search query是否为cheez,若参数异常,优化参数获取逻辑:const query = req.nextUrl.searchParams.get('query')?.trim() || ''; console.log(`Received query: "${query}"`);检查数据库字符集
确保数据库使用支持不区分大小写的字符集(如utf8mb4_unicode_ci),避免字符集导致的匹配失败。
内容的提问来源于stack exchange,提问作者tinpo
相关产品推荐
相关产品推荐

