Sails.js/Waterline には、深くネストされた関連付けを設定する組み込みの方法はまだありません。
次のようなモデルを設定する必要があります。
ゲーム:
attributes:{
SchoolID:{
model: 'School'
}
// rest of attributes
}
参加者:
attributes:{
SchoolID:{
model: 'School'
},
GameID:{
model: 'Game'
}
// rest of attributes
}
クエリより:
Game.find({Status:"Active"})
.populate("School",{
where: {
Status: "Active"
}
})
.populate("Participants",{
where: {
Status: "Active"
}
}).exec(function (err, result){
return result
});
そして今、それはトリッキーな部分です。アクティブなゲームで配列を取得します。アクティブな学校や参加者がいるかどうかは関係ありません。その結果、参加者と学校の 2 つのサブ配列ができます。それらが空でない場合、それはあなたの結果です。
[
{
SchoolID: [],
GameID: [],
Name: '',
Status: ''
},
{
SchoolID: [SchoolID: 1, Name: '', Status: 'Active'],
GameID: [SchoolID: 1, GameID: 1, Name: '', Status: 'Active'],
Name: '',
Status: ''
}
]
lodash フィルターを使用して結果をクリーンアップできます。
はるかに簡単な2番目の解決策は、.query()を使用することです
作成したクエリをそのまま使用できます。
School.query('select * from Participants inner join Game on Participants.GameID=Game.GameID inner join School on Game.SchoolID=School.SchoolID where Participants.Status="Active" and Game.Status="Active" and School.Status="Active"', function(err, results) {
return results;
});