sql >> Databáze >  >> RDS >> Mysql

Sequelize:vícenásobná klauzule where

Předpokládám, že se ptáte na způsob provádění dotazu Sequelize. Nejsem si jistý, zda vaší otázce rozumím správně. Hledáte dva dotazy:

  • Dotaz na všechny články sledovaných uživatelů,
  • Dotaz na zemi/značku/článek konkrétního uživatele,

Dovolte mi začít s asociacemi vytvořenými mezi modely.

// in User model definition
User.belongsToMany(User, { as: 'Followers', through: 'Followers', foreignKey: 'userId', otherKey: 'followId' });
User.hasMany(Subscribe, { foreignKey: 'userId' });
User.hasMany(Article, { foreignKey: 'userId' });

S využitím výše uvedeného přidružení jsme nyní schopni dotazovat se na všechny články sledovaných uživatelů

models.User.findByPrimary(1, {
    include: [
        {
            model: models.User,
            as: 'Followers',
            include: [ models.Article ]
        }
    ]
}).then(function(user){
    // here you have user with his followers and their articles
});

Výše uvedený dotaz by vygeneroval výsledek podobný

{
    id: 1,
    Followers: [
        {
            id: 4,
            Articles: [
                {
                    id: 1,
                    title: 'article title' // some example field of Article model
                }
            ]
        }
    ]
}

Pokud se chcete dotázat na zemi/značku/článek, který odebírá konkrétní uživatel, budete muset vytvořit další přidružení v Subscribe model

// in Subscribe model definition
Subscribe.belongsTo(Tag, { foreignKey: 'tagId' });
Subscribe.belongsTo(Article, { foreignKey: 'articleId' });
Subscribe.belongsTo(Country, { foreignKey: 'payId' });

Nyní máme všechna přidružení potřebná k provedení druhého dotazu, o který jste požádali

models.User.findByPrimary(1, {
    include: [
        {
            model: models.Subscribe,
            include: [ models.Tag, models.Country, models.Article ]
        }
    ]
}).then(function(user){
    // here you get user with his subscriptions
});

V tomto příkladu získáte uživatele se všemi jeho odběry zpřístupněnými přes user.Subscribes , který bude mít vnořené atributy Tag , Country a Article . Pokud se uživatel přihlásil k odběru Tag , obě Country a Article bude NULL v tomto případě.



  1. Jak spočítat všechny řádky při použití SELECT s LIMIT v dotazu MySQL?

  2. Automatické generování souboru odpovědí

  3. Python psycopg2 se nevkládá do tabulky postgresql

  4. Jak získám názvy sloupců v Laravel 4?