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

findAndCountAllの親モデルに影響を与える条件をsequelizeのサブサブ子モデルに追加するにはどうすればよいですか?

    さて、私は解決策を考え出しましたが、Joinsを使用して生のクエリを追加し、必要な場所に必要な条件を追加して、メインモデルのIDを取得しました。次に、sequelizeを使用してデータをフェッチし、where句にこれらのIDを追加しました。私のコードは今このようになっています。

    const { limit, offset } = dbHelpers.GetPagination(
        req.query.limit,
        req.query.offset
    );
    
    let querySting = "(SELECT count(DISTINCT p.id) FROM ModelA p " +
        "JOIN ModelB cp ON cp.pId = p.id " +
        "JOIN ModelC cs ON cs.cpId = cp.id " +
        "JOIN ModelD ms ON ms.csId = cs.id " +
        "LEFT JOIN ModelE sa ON sa.msId = ms.id " +
        "LEFT JOIN ModelF pp ON pp.msId = ms.id " +
        "LEFT JOIN ModelG sta ON sta.ppId = pp.id " +
        "LEFT JOIN ModelH ol ON ol.cdId = cd.id " +
        "WHERE "   //you can add your conditions here
        + " ORDER BY p.id desc LIMIT  " + offset + ",  " + limit + ")"
    
    
    const rawQuery = await models.sequelize.query(querySting,
        { type: QueryTypes.SELECT })
    const Ids = rawQuery.map(result => result.id)
    
    const results = await models.ModelA.findAndCountAll({
        where: {
            id: Ids
        },
        include: [
            {
                model: models.ModelB,
                as: "ModelB",
                include: [
                    {
                        model: models.ModelC,
                        separate: true,
                    },
                    {
                        model: models.ModelD,
                        separate: true,
                        include: [
                            {
                                model: models.ModelE,
                                separate: true,
                                                {
                                model: models.ModelF,
                                separate: true,
                            },
                        ],
                    },
                ],
            },
        ],
    },
        {
            model: models.ModelG,
            include: [
                {
                    model: models.ModelH,
                    as: "ModelH",
                },
            ],
        },
                    ],
                });
    



    1. Oracle SQL:列は許可されていません

    2. Mysqlいくつかのランダムな行と1つの特定の行を選択します

    3. SQLServerの条件付きフロー

    4. group_concatを使用したクエリは、1行のみを返します