MSSQLでSequelize.jsを使用してカスタム結合条件を作成する必要があります。Sequelize.jsのカスタムまたはオーバーライド
:私は私の参加でOR
句のために解決したい
LEFT OUTER JOIN [TableB]
ON [TableB].[ColumnB] = COALESCE (
[TableC].[ColumnC],
[TableA].[ColumnA]
)
:具体的には、私はTableA
とTableB
の列からCOALESCE
値に基づいてTableB
に参加し、このような結合条件で終わる必要があります
LEFT OUTER JOIN [TableB]
ON [TableB].[ColumnB] = [TableA].[ColumnA]
OR [TableB].[ColumnB] = [TableC].[ColumnC]
I readrequired: false
をスコープ定義に含めることで、このような動作を実現できます。ご覧のとおり、私はこれを有効にしようとしている私の範囲を取り払ってきました。私はMySQLを使用していた場合
LEFT OUTER JOIN [TableB]
ON [TableB].[ColumnB] = [TableA].[ColumnA]
AND [TableB].[ColumnB] = COALESCE (
[TableC].[ColumnC],
[TableA].[ColumnA]
)
、私は単にJOIN
にSELECT
からCOALESCE
値を使用することができると思うとに良いこと:
私が得ることができる最高のは、これが(AND
句に注意してください)です私の以前の研究では、値を再計算する必要があることを読みました。
私はTableA
のためのダウン剥奪モデル定義用意しました:
export default (sequelize, DataTypes) => sequelize.define('TableA',
{
// Attributes omitted..
},
{
classMethods: {
associate ({
TableB,
TableC
}) {
this.belongsTo(TableB, {
foreignKey: 'ColumnA',
targetKey: 'ColumnB'
});
this.belongsTo(TableC, {
foreignKey: 'ColumnA',
targetKey: 'ColumnC'
});
},
attachScope ({
TableB,
TableC
}) {
this.addScope('defaultScope', {
attributes: [
...Object.keys(this.attributes),
[
sequelize.fn(
'COALESCE',
sequelize.col('[TableC].[ColumnC]'),
sequelize.col('[TableA].[ColumnA]')
),
'ColumnA'
]
],
include: [
{
model: TableB,
where: {
ColumnB: sequelize.fn(
'COALESCE',
sequelize.col('[TableC].[ColumnC]'),
sequelize.col('[TableA].[ColumnA]')
)
},
required: false
},
{
model: TableC,
required: false
}
],
required: false
}, { override: true });
}
}
}
);
をどのような援助をいただければ幸いです、そして任意の追加情報が必要な場合は私に知らせてください。
注:私は従来のデータベースを使用していますが、残念ながらデータ構造を変更することはできません。
提案していただきありがとうございますが、単純に生のクエリを使用しないようにする関連付けのレイヤーがいくつかあります。私はできることを望む! –