2016-09-10 4 views
0

Im пытается сделать api для магазина, используя книжную полку, как мой ORM. Чтобы успокоиться, я хочу, чтобы мой путь выглядел примерно так. '/ mens/jackets' Мои данные структурированы таким образом, что для этого мне нужно найти категорию (мужчина/женщина), чтобы я мог получить связанный с ней раздел (куртки, джинсы, шляпы и т. Д.), Затем получить связанные продукты для этот раздел. Данные таковы, что есть 2 строки разделов с именем куртки, но один имеет fk, связывающий категорию с 1 (make), а другой - с 2 (женский).Несколько соединений на книжной полке js

Я нашел это в документации, но он не будет работать (как я предполагаю), вы можете связать цепочку только тогда, когда первая связанная возвращает единую сущность, и в этом случае мои категории имеют много разделов.

new Photo({id: 1}).fetch({ 
    withRelated: ['account'] 
    }).then(function(photo) { 
    if (photo) { 
    var account = photo.related('account'); 
    if (account.id) { 
    return account.related('trips').fetch(); 
    } 
} 
    }); 

В сыром SQL мой запрос будет выглядеть следующим образом

SELECT * FROM sections 
JOIN categories ON categories.id = sections.category_id 
JOIN products ON products.section_id = sections.id 
where categories.name = 'mens' AND sections.name = 'jackets'; 

Любая помощь будет высоко оценен.

ответ

0

После создания модели разделов вы можете использовать такой запрос.

Sections.query(qb => { 
qb.leftJoin('categories', 'sections.category_id', 'categories.id); 
qb.leftJoin('products', 'sections.id', 'products.section_id); 
qb.where('categories.name', 'men'); 
qb.andWhere('sections.name', 'jackets'); 
}.fetchOne({withRelated: 'products'}); 
+0

привет спасибо за помощь. К сожалению, когда я пытаюсь это сделать, я получаю сообщение об ошибке, указывающее, что fetchOne не является функцией. Я проверил ваш код против документации и так же, как они это сделали, поэтому он должен работать ... –

+0

привет, как насчет попытки с помощью fetchAll? также вы можете показать мне, как выглядит ваша модель разделов? – Rachel613

0

Вы можете непосредственно получать поездки с учетом, например:

new Photo({id: 1}).fetch({ 
    withRelated: [ 
    { 'account': qb => qb.where(needed conditions) }, 
    'account.trips', 
    ] 
}).then(function(photo) { 
    YOUR CODE 
}); 

Теперь вы Жюст должны проверить, если .related('account') и .related('account').related('trips') не нуль, прежде чем использовать их

Я надеюсь, что это помогает :)

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