2017-05-03 45 views
1

Sequelize.jsを使用して特定の列にいくつかの表を結合しようとしています。Sequelize.jsを使用して特定の列に結合する

各テーブルの主キーは、 'ID' である
table_1.findall({ 
    include: [{ 
    model: table_2 
    attributes: ['id', 'another_id'] 
    include: [{ 
     model: table_3 
     required: true 
     attributes: ['time'] 
    }] 
    }] 
}) 

はこれまでのところ、私のコードは次のようなものです。

SELECT * 
FROM table_1 as t1 
LEFT OUTER JOIN table_2 as t2 ON t1.id = t2.t1_id 
INNER JOIN table_3 as t3 ON t2.id = t3.t2_id 

と私のようなものが欲しい:

これは、次のSQL(つまり、この質問の焦点では​​ないので、私は、簡潔にするためにSELECT *を示しています)と同等であると考えられます

SELECT * 
FROM table_1 as t1 
LEFT OUTER JOIN table_2 as t2 ON t1.id = t2.t1_id 
INNER JOIN table_3 as t3 ON t2.another_id = t3.t2_id 

t2とt3の間で強制的に結合する方法は、t2の主キー以外のものを使用する方法がありますか?

Sequelize documentationに[options.include []。on] が見つかりましたが、自分のON条件をサポートするための構文がわかりません。

答えて

2

モデルのclassMethodsセクションで定義されている、関連付け自体に特殊ケースの外部キー名を定義する必要があります。ここでは特別な名前を持つ外部キーで、二回usersテーブルに参加するテーブルの例です:

classMethods: { 
    associate(models) { 
    this.belongsTo(models.user, { 
     foreignKey: 'created_by_user_id', 
     as: 'created_by', 
    }); 
    this.belongsTo(models.user, { 
     foreignKey: 'updated_by_user_id', 
     as: 'updated_by', 
    }); 
    }, 
}, 

次に、あなたのfindAllに、特別な何かをする必要はありません - sequelizeは、外部キー列を使用することを知っているだろう自動的に。

関連する問題