在我的代码中,我有多个Sequelize(使用MySQL作为db驱动程序)模型,如Car
,Bike
,ElectronicPart
,都有一个name
字段。现在我试着为所有这些模型提供一个搜索栏功能,基于它们的名字。
例如搜索Cars:
Car.findAll({ where: { name: '%search_query%' } })
是否有一种方法可以同时为多个模型执行此操作,而不必为每个模型并行运行查询或生成某种类型的主表?
模型之间没有关联,对吗?您可能无法在同一个findAll方法中查询多个模型。您需要为它编写自己的SQL查询:
const { QueryTypes } = require('sequelize')
const results = await sequelize.query('SELECT * FROM Car WHERE name LIKE :search UNION SELECT * FROM Bike WHERE name LIKE :search ... (Other models)',
{
replacements: {search: req.query.search},
type: QueryTypes.SELECT
}
)
SQL sytnax可能是不正确的,因为我不经常使用它,但理论上你应该能够查询所有你想要的表,并使用UNION将它们连接到一个结果。