2017-01-13 3 views
1

У меня есть 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: ... } })

ответ

0

Try без включают

db.Post.findAll({ 
     where: { 
      '$photo.id$': { $eq: null }, 
      '$audio.id$': { $eq: null } 
     }, 
     order: [ 
      ['createdAt', 'DESC'] 
     ] 
    }).then((posts) => { 
     ... 
    }); 
+0

Мне нужны эти ассоциации в заключительных случаях, хотя. –

+0

Тогда почему у вас есть настоящая истина, она не даст результата, если фотографии и аудио пустые –

+0

Хм, я вижу, что вы сейчас говорите. Я на самом деле столкнулся с отдельной ошибкой, в которой включение ограничения прерывает запрос (ошибка здесь: https://github.com/sequelize/sequelize/issues/3095) –

 Смежные вопросы

  • Нет связанных вопросов^_^