2016-09-10 14 views
0

私のORMとしてブックシェルフを使用しているショップのAPIを作成しようとしています。 物事を穏やかにするために、私は自分の道がこのように見えるようにしたい。 '/メンズ/ジャケット' 私のデータはこれを行うために私は関連するセクション(ジャケット、ジーンズ、帽子など)を得ることができるようにカテゴリ(男性/女性)を見つけなければならないように構造化されています。そのセクション。データは、ジャケットの名前を持つ2つのセクション行がありますが、1つはカテゴリを1(make)にリンクし、もう1つは2(女性)にリンクするfkを持つようなデータです。本棚の複数の結合ja

私はこれをドキュメントで見つけましたが、最初の関連が単一のエンティティを返すときに関連するチェーンのみが可能で、この場合はカテゴリにセクションが多数あります(私は推測しています)。生のSQLで

new Photo({id: 1}).fetch({ 
    withRelated: ['account'] 
    }).then(function(photo) { 
    if (photo) { 
    var account = photo.related('account'); 
    if (account.id) { 
    return account.related('trips').fetch(); 
    } 
} 
    }); 

私のクエリは、この

SELECT * FROM sections 
JOIN categories ON categories.id = sections.category_id 
JOIN products ON products.section_id = sections.id 
where categories.name = 'mens' AND sections.name = 'jackets'; 

ようになります任意の助けいただければ幸いです。

答えて

0

セクションモデルを作成した後、このようなクエリを使用できます。

Sections.query(qb => { 
qb.leftJoin('categories', 'sections.category_id', 'categories.id); 
qb.leftJoin('products', 'sections.id', 'products.section_id); 
qb.where('categories.name', 'men'); 
qb.andWhere('sections.name', 'jackets'); 
}.fetchOne({withRelated: 'products'}); 
+0

こんにちは、ありがとうございます。残念なことに私がこれを試してみると、fetchOneは関数ではないというエラーが表示されます。私はあなたのコードをドキュメントと同じ方法でチェックしていますので、それがうまくいくはずです。 –

+0

こんにちは、fetchAllを試してみてはいかがですか?また、あなたのSectionsモデルの様子を私に見せてもらえますか? – Rachel613

0

あなたは直接のように、アカウントで旅行を取得することができます:今、あなたは彼らに

を使用する前に.related('account').related('account').related('trips')が、私はそれが役に立てば幸いnullでないかどうかを確認する必要がありジュスト

new Photo({id: 1}).fetch({ 
    withRelated: [ 
    { 'account': qb => qb.where(needed conditions) }, 
    'account.trips', 
    ] 
}).then(function(photo) { 
    YOUR CODE 
}); 

:)