関連をサポートするsails@0.10.0-rc4のカスタムアダプターに取り組んでいますが、アダプターと連携して機能させるのに問題があります。私の構成は、記事と統計の間の 1 対多の関連付けです。私のモデルとアダプターは次のように設定されています。
// api/models/article.js
module.exports = {
connection: ['myadapter'],
tableName: 'Knowledge_Base__kav',
attributes: {
KnowledgeArticleId: { type: 'string', primaryKey: true }
stats: {
collection: 'stats',
via: 'parentId'
}
}
// api/models/stats.js
module.exports = {
connection: ['myadapter'],
tableName: 'KnowledgeArticleViewStat',
attributes: {
count: 'integer',
ParentId: {
model: 'article'
}
}
}
// adapter.js
find: function(connectionName, collectionName, options, cb) {
console.dir(options)
// output
// {where: null}
db.query(options, function(err, res)) {
cb(err, res)
}
}
ただし、を使用してデータを入力しようとすると、アダプターが受け取ると予想されるときにArticle.find().populate('stats').exec(console.log())
、アダプターがオプションとして取得されます。記事のリストが返されますが、別のモデル (統計) から入力されるはずのフィールドは空のリストです。{where: null}
{where: {parentId: [<some-article-id>]}}
これは、アダプターが主キーで関連モデルを検索するための適切な場所パラメーターを取得していないという事実に関連しているように感じます。これをさらにテストするために、sails-mongo アダプターを使用してテスト用の 1 対多の関係をセットアップします。この場合、アダプターは期待どおりのパラメーターを受け取り、関連付けは正常に機能しました。
.populate('stats')
適切な「場所」パラメーターをアダプターに送信しない理由について、誰かが何か考えを持っていますか?
3/7 更新
そのため、アソシエーションで何が起こるかは、 SomeModel.find() がアダプターに1回ヒットし、次に .populate('othermodel') が最初のリクエストの主キーを使用してアダプターに再度ヒットするようです。次に、両方の結果が結合されます。私の場合、アダプターに対する 2 回目のヒットは、何らかの理由で発生していません。
アップデート
元の問題は、以下のコメントに記載されている属性の命名エラーに関連していました。ただし、粒子バナナで言及されている最終的な人口ステップにはまだいくつかの問題があるようです。
最終ステップは次のとおりです。返されたすべてのクエリ操作からすべてのクエリ結果を取得し、それらをメモリ内で結合して、exec コールバックで返すことができる結果セットを構築します。
必要なすべてのクエリが実行されていることがわかりますが、エイリアスを実際に設定できていません。簡単に使用できるように、gist の形式でデバッグ出力を追加した呼び出しを次に示します: https://gist.github.com/jasonsims/9423170