1

データベースとして Postgresql を使用して、Sails クエリ言語を使用して 2 つのテーブルをクエリしようとしています。

「Person」と「Pet」の 2 つのテーブルがあります。

「人」の場合、そのモデルは次のとおりです。

id: { type: 'integer', primaryKey }
namePerson: { type: 'string' }
age: { type: 'integer' }

「ペット」のモデルは次のとおりです。

id: { type: 'integer', primaryKey }
owner: { model: 'Person' }
namePet: { type: 'string' }

12 歳未満の人が飼っているすべてのペットを検索したいのですが、それを 1 回のクエリで実行したいと考えています。それは可能ですか?

私は2つのクエリでそれを行う方法しか知りません。まず、12 歳未満の人をすべて見つけます。

Person.find({age: {'<', 12}}).exec(function (err, persons) {..};

次に、所有しているすべてのペットを見つけます。

Pet.find({owner: persons}).exec( ... )
4

1 に答える 1

2

ここでは、1 対多の関連付けが必要です(1 人が複数のペットを持つことができます)。

あなたの人はペットに関連付けられている必要があります。

module.exports = {

    attributes: {
        // ...
        pets:{
            collection: 'pet',
            via: 'owner'
        }
    }
}

あなたのペットは人と関連付けられるべきです:

module.exports = {

    attributes: {
        // ...
        owner:{
            model:'person'
        }
    }
}

年齢基準で引き続きユーザーを見つけることができます。

Person
    .find({age: {'<', 12}})
    .exec(function (err, persons) { /* ... */ });

ユーザーとペットを取得するには、関連付けを設定する必要があります。

Person
    .find({age: {'<', 12}})
    .populate('pets')
    .exec(function(err, persons) { 
        /* 
        persons is array of users with given age. 
        Each of them contains array of his pets
        */ 
    });

セイルを使用すると、次のように 1 つのクエリで複数の人口を実行できます。

Person
    .find({age: {'<', 12}})
    .populate('pets')
    .populate('children')
    // ...

しかし、ネストされた個体群は存在しません。ここで議論を出してください。

于 2015-09-28T08:23:33.720 に答える