Запрос фильтра SQL на книжной полке как Laravel в nodejs - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок в node.js, и это ORM (bookshelf).Мне нужно знать, как получить пользователя, который имеет какие-либо конкретные жанры.

1). Здесь users имеют несколько genres, что означает users hasMany жанров и genresownToMany users.

Ques). Как выбрать всех пользователей, которые имеют genres = 1

  • Ниже мой код пытаетсячтобы достичь этого, но не смог получить правильный ответ.

    User.forge()
      .query(function(query){
         query.whereExists(function(){
             this.select('*').from('genres')
             .join('genres_user', function(){
                this.on('genres.id', '=', 'genres_user.genres_id');
             })
            .where('users.id', 'genres_user.user_id')
            .where('genres_id', req.query.genres);
         });
       })
      .fetchAll({
         withRelated : ['profile', 'posts']
       })
      .then(function (collection) {
         if(collection == ''){
             res.json({error: true, message:'No user found!', data:{}});
         }
    
         res.json({error: false, data: collection.toJson()});
      })
     .catch(function (err) {
        res.status(500).json({error: true, data: {message: err.message}});
     });
    

1 Ответ

0 голосов
/ 04 декабря 2018

На самом деле мне нужно что-то вроде whereHas() (как в Laravel) на книжной полке, но в bookshelf ничего такого нет.Но я разбираюсь с этим через необработанные SQL-запросы, которые выполняются следующим образом и работают отлично, как мне нужно.

User.forge()
.query(function(query){
   query.whereExists(function(){
       this.select('*').from('genres')
       .join('genres_user', function(){
           this.on('genres.id', '=', 'genres_user.genres_id');
       })
      .whereRaw('users.id = genres_user.user_id')
      .where('genres_id', req.query.genres);
   });
})
.fetchAll({
   withRelated : ['profile', 'posts']
})
.then(function (collection) {
    if(collection == ''){
       res.json({error: true, message:'No user found!', data:{}});
    }

    res.json({error: false, data: collection.toJson()});
})
.catch(function (err) {
   res.status(500).json({error: true, data: {message: err.message}});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...