У меня есть 3 модели: Post
, Photo
и Audio
.Sequelize Где ассоциированная модель Null
Столб может быть фото или аудио клип (или ни):
models.Post.hasOne(models.Photo, { as: 'photo' });
models.Post.hasOne(models.Audio, { as: 'audio' });
Я пытаюсь выбрать те из них, которые не имеют ни - то есть только текст после. Я копался, и я прибыл в (Sourcing информации из here):
db.Post.findAll({
where: {
'$photo.id$': { $eq: null },
'$audio.id$': { $eq: null }
},
order: [
['createdAt', 'DESC']
],
include: [{... "photo" and "audio" - both with required: true}],
}).then((posts) => {
...
});
однако, что, кажется, не работает (я не думаю, что в полной мере понять, как ссылаются соответствующие модели) , Кроме того, в результате запроса использует INNER JOINS
вместо LEFT JOINS
поэтому, когда он пытается присоединиться Posts
и Photos
/Audios
, он производит пустой результат вместо результата со всеми значениями Post
и пустых столбцов для Photo
и Audio
.
Полученный запрос:
SELECT ... FROM (
SELECT *
FROM "Posts" AS "Post"
INNER JOIN "Photos" AS "photo"
ON "Post"."id" = "photo"."postId"
INNER JOIN "Audios" AS "audio"
ON "Post"."id" = "audio"."postId"
WHERE
"photo"."id" IS NULL AND
"audio"."id" IS NULL
) AS ...
Запрос
SELECT *
FROM "Posts" AS "Post"
LEFT JOIN "Photos" AS "photo"
ON "Post"."id" = "photo"."postId"
LEFT JOIN "Audios" AS "audio"
ON "Post"."id" = "audio"."postId"
WHERE
"photo"."id" IS NULL AND
"audio"."id" IS NULL
производит результирующий набор я ищу. Я думаю, что моя проблема - это флаг include: [{ ... required: true }, ...]
для каждой включенной модели, но я не уверен, как ее включить. для запроса, но не требуется для сбора результатов.
В моем мире мечты, запрос sequelize будет выглядеть
db.Post.findAll({ where: { photo: { $eq: null }, audio: ... } })
Мне нужны эти ассоциации в заключительных случаях, хотя. –
Тогда почему у вас есть настоящая истина, она не даст результата, если фотографии и аудио пустые –
Хм, я вижу, что вы сейчас говорите. Я на самом деле столкнулся с отдельной ошибкой, в которой включение ограничения прерывает запрос (ошибка здесь: https://github.com/sequelize/sequelize/issues/3095) –