2016-07-21 2 views
1

у меня есть соотношение, примерно следующим образом:Sequelize: Родитель, по крайней мере, один детей

Parent: [id, name] 
Children1: [id, parent_id, name] 
Children2: [id, parent_id, name] 
Children3: [id, parent_id, name] 
Children4: [id, parent_id, name] 

Parent 
    .hasMany -> Children1 
    .hasMany -> Children2 
    .hasMany -> Children3 
    .hasMany -> Children4 

Так что, если я делаю:

Parent->findOne({ 
    include: [{model: Children1}, {model: Children2}] 
}) 

Это только принесет Родитель, где есть детей1 и children2 (т.е. Внутреннее соединение). Если я:

Parent->findOne({ 
    include: [ 
    {model: Children1, required: false}, 
    {model: Children2, required: false} 
    ] 
}) 

Это принесет Родитель и если есть она принесет детей1 и/или Children2. (т.е. левое соединение).

Что я хочу сделать, это привести родителя ЕСЛИ И ТОЛЬКО ЕСЛИ либо дети1, либо Дети2 или ДетиN существуют. Может быть любой из детейN или может быть все из них. Пока есть хотя бы 1, я хочу привести Родитель.

Любые идеи?

ответ

0

Добавьте required: true к вашим объектам включения, чтобы каждый из них присоединился к правильному соединению. Есть ли у вас четыре отдельные таблицы для детей?

+0

Это был всего лишь пример, каждый «Детей» - это другой стол с другим дерьмом. Итак, требуется: true делает правильное соединение, в то время как отсутствие необходимых атрибутов создает внутреннее соединение? – yBrodsky

+0

Я попробовал то, что вы сказали, он по-прежнему создает внутреннее соединение, с обязательным: true – yBrodsky

+0

Знаете, что у меня всегда было предложение where, которое включено в мой список при использовании требуемого true. Возможно, это требование. Сейчас у меня нет ноутбука, но я проверю его, когда буду. –

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