#node.js #sequelize.js
#node.js #sequelize.js
Вопрос:
моя жалоба на модель:
module.exports = (sequelize, DataTypes) => {
class complaint extends Model {
static associate(models) {
this.research = this.hasMany(models.research, {as: 'research', foreignKey: 'complaint_id' })
}
}
complaint
.init({
date: {
type: DataTypes.DATE,
allowNull: false,
},
complaint: {
type: DataTypes.TEXT,
allowNull: false,
},
}, {
sequelize,
modelName: 'complaint',
freezeTableName: true,
tableName: 'complaint',
})
return complaint
}
мое исследование модели:
module.exports = (sequelize, DataTypes) => {
class research extends Model {
static associate(models) {
this.complaint = this.belongsTo(models.complaint, { foreignKey: 'id'})
}
}
research.init({
complaint_id: {
type: DataTypes.INTEGER,
model: 'complaint',
key: 'id',
deferrable: Deferrable.INITIALLY_IMMEDIATE(),
},
research: {
type: DataTypes.JSONB,
allowNull: false,
},
}, {
sequelize,
modelName: 'research',
freezeTableName: true,
tableName: 'research',
})
return research
}
мой запрос
const query = {
where: {
'$research.id$': null,
},
limit: 3,
attributes: [
'id',
'date',
],
include: [
{
model: models.research,
as: 'research',
attributes: ['id','complaint_id'],
},
],
order: [["date","ASC"]],
}
const complaint = await models.complaint.findAll(query) // <--- error "missing FROM-clause entry for table "research""
если удалить «limit: 3», он работает нормально. также с limit: 3 генерируется странный sql:
без ограничения: 3
SELECT "complaint"."id", "complaint"."date", "research"."id" AS "research.id"
FROM "complaint" AS "complaint"
LEFT OUTER JOIN "research" AS "research" ON "complaint"."id" = "research"."complaint_id"
WHERE "complaint"."sub_id" IS NULL
AND "research"."id" IS NULL
ORDER BY "complaint"."date" ASC;
с ограничением: 3
SELECT "complaint".*, "research"."id" AS "research.id"
FROM (SELECT "complaint"."id", "complaint"."date"
FROM "complaint" AS "complaint"
WHERE "complaint"."sub_id" IS NULL
AND "research"."id" IS NULL
ORDER BY "complaint"."date" ASC
LIMIT 3) AS "complaint"
LEFT OUTER JOIN "research" AS "research" ON "complaint"."id" = "research"."complaint_id"
ORDER BY "complaint"."date" ASC;
хотя ожидается, что только слово изменится с «research».»id» равно NULL на «research».»id» NotNull
Это ошибка в моем запросе или в коде продолжения?
Комментарии:
1. Можете ли вы описать в своем сообщении, чего вы пытаетесь достичь? Жалобы без исследований или что?
2.
research
имеет столбецcomplaint_id
, но выглядит так, как будто запрос ссылается на вызываемое полеid
.3. Анатолий, извините, мне нужно сделать разбивку на страницы, но я не понимаю, где я мог ошибиться. Мне нужно возвращать жалобы, которые имеют исследования и не имеют. работает без разбивки на страницы, а не с ним
4. Nir Alfasi, этот столбец можно удалить, ничего не изменится. ограничение также приведет к прерыванию запроса