2017-02-23 34 views
0

SQLクエリを作成し、それをSequelizeに適用しようとしていますが、同じテーブルで関連付けを作成する方法を見つけることができません。ここではSQLは次のとおりです。ここで同じテーブルの内部結合Sequelize

SELECT t1.* 
FROM `configurations` t1 
INNER JOIN 
(
    SELECT max(configuration_start) maxConfigStart, pb_id 
    FROM `configurations` 
    WHERE 
     active = 1 
     AND DATE(configuration_start) <= DATE(NOW()) 
    GROUP BY `pb_id` 
) t2 
    ON t1.`pb_id` = t2.`pb_id` 
    AND t1.`configuration_start` = t2.`maxConfigStart` 
WHERE t1.`active` = 1 
ORDER BY t1.`configuration_start` DESC 

は、モデルの定義である:

configurations = sequelize.define 'configurations', { 
    id: 
    type: Sequelize.INTEGER 
    primaryKey: true 
    autoIncrement: true 
    configuration_name: Sequelize.STRING 
    pb_id: Sequelize.INTEGER 
    device_id: Sequelize.STRING 
    event_id: Sequelize.INTEGER 
    configuration_start: Sequelize.DATE 
    configuration_end: Sequelize.DATE 
    utc_offset: Sequelize.STRING 
    watermark_id: Sequelize.INTEGER 
    ipad_config_id: Sequelize.INTEGER 
    screen_group_id: Sequelize.INTEGER 
    color_table_id: Sequelize.INTEGER 
    animated_overlay_group: Sequelize.INTEGER 
    created: Sequelize.DATE 
    updated: Sequelize.DATE 
    active: Sequelize.INTEGER 
}, { 
    timestamps: false, 
    scopes: { 
    currentConfigTimes: { 
     attributes: ['pb_id', [sequelize.fn('max', sequelize.col('configuration_start')), 'configuration_start']] 
     where: 
     active: 1 
     configuration_start: 
      lte: new Date() 
     group: ['pb_id'] 
    }, 
    currentConfigIds: { 
     attributes: ['pb_id', 'configuration_start', 'id'] 
     where: 
     active: 1 
     configuration_start: 
      lte: new Date() 
     order: [['configuration_start', 'DESC']] 
    } 
    } 
} 

誰かが提供できることをすべてのヘルプは非常に高く評価されるだろう。基本的に私はpb_idごとに最新の過去の設定を取得しようとしています。多分もっと良い方法がありますか?

+0

あなたはSQLに問題はなく、最後のWHEREは必要ありません....あなたの問題は何ですか? – SIDU

+0

Sequelizeでこれを行う方法がわかりません。私はそれをSQLでうまくやることができますが、ORMに転送する方法はわかりません。 – tonestrike

答えて

0

現時点では、現在のところSequelizeを使用することは実際には不可能です。これを行うための最善の方法を理解しようとしているドキュメンテーションで多大な時間を費やした後、私はthis Github issueと全く同じ問題を解決しようとした。最良の解決策は、現時点で未加工のクエリを使用することです。