sql >> データベース >  >> RDS >> Mysql

続編:複数のwhere句

    Sequelizeのクエリ方法について質問されたと思いますが、あなたの質問を正しく理解しているかどうかはわかりません。 2つのクエリを探しています:

    • フォローしているユーザーのすべての記事をクエリする
    • 特定のユーザーの登録国/タグ/記事をクエリする

    モデル間で行われた関連付けから始めましょう。

    // 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' });
    

    上記の関連付けを使用して、フォローしているユーザーのすべての記事をクエリできるようになりました

    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
    });
    

    上記のクエリは、

    と同様の結果を生成します
    {
        id: 1,
        Followers: [
            {
                id: 4,
                Articles: [
                    {
                        id: 1,
                        title: 'article title' // some example field of Article model
                    }
                ]
            }
        ]
    }
    

    特定のユーザーが購読している国/タグ/記事を照会する場合は、Subscribeで別の関連付けを行う必要があります。 モデル

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

    これで、要求した2番目のクエリを実行するために必要なすべての関連付けができました

    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
    });
    

    この例では、user.Subscribesを介してアクセスされたすべてのサブスクリプションを持つユーザーを取得します 、ネストされた属性TagCountry およびArticle 。ユーザーがTagを購読している場合 、両方のCountry およびArticle NULLになります この場合。



    1. MySQLは過去の日付(1200など)をサポートしていますか?

    2. データを別のテーブルにコピーする

    3. mysql2つの列を使用していない場合

    4. Laravel DB::selectクエリでページ付けを使用する方法