Được rồi, vì vậy tôi đã tìm ra giải pháp nhưng thêm một truy vấn thô với Tham gia, trong đó tôi đã thêm các điều kiện bắt buộc của mình vào bất cứ nơi nào tôi cần và tìm nạp id của mô hình chính. Sau đó, tôi tìm nạp dữ liệu bằng cách sử dụng phần tiếp theo thêm các id đó vào mệnh đề where. Mã của tôi bây giờ trông giống như thế này.
const { limit, offset } = dbHelpers.GetPagination(
req.query.limit,
req.query.offset
);
let querySting = "(SELECT count(DISTINCT p.id) FROM ModelA p " +
"JOIN ModelB cp ON cp.pId = p.id " +
"JOIN ModelC cs ON cs.cpId = cp.id " +
"JOIN ModelD ms ON ms.csId = cs.id " +
"LEFT JOIN ModelE sa ON sa.msId = ms.id " +
"LEFT JOIN ModelF pp ON pp.msId = ms.id " +
"LEFT JOIN ModelG sta ON sta.ppId = pp.id " +
"LEFT JOIN ModelH ol ON ol.cdId = cd.id " +
"WHERE " //you can add your conditions here
+ " ORDER BY p.id desc LIMIT " + offset + ", " + limit + ")"
const rawQuery = await models.sequelize.query(querySting,
{ type: QueryTypes.SELECT })
const Ids = rawQuery.map(result => result.id)
const results = await models.ModelA.findAndCountAll({
where: {
id: Ids
},
include: [
{
model: models.ModelB,
as: "ModelB",
include: [
{
model: models.ModelC,
separate: true,
},
{
model: models.ModelD,
separate: true,
include: [
{
model: models.ModelE,
separate: true,
{
model: models.ModelF,
separate: true,
},
],
},
],
},
],
},
{
model: models.ModelG,
include: [
{
model: models.ModelH,
as: "ModelH",
},
],
},
],
});