2015-12-22 22 views
5

Klasik bir ORM sorunu üzerinde sıkışmış gibi görünüyorum ve gerçekten nasıl başa çıkacağını bilmiyorum, bu nedenle herhangi bir yardım bekliyoruz.loopback ilişkisel veritabanı hasManyThrough pivot tablo

Bir hasManyThrough sorgusunda pivot tablosunu elde etmenin bir yolu var mı? Daha da iyisi, biraz filtre uygulayın veya ona göre sıralayın. Tipik bir örnek

Tablo ürünleri

id,title 

Tablo kategorileri

id,title 

tablo products_categories Yani

productsId, categoriesId, orderBy, main 

, yukarıdaki senaryoda, ürünün tüm kategorileri almak istiyorum demek X (ana = doğru) veya ürün kategorilerini sıralamak istediğinizde orderBy. Şimdi ne olacak

fiili kategoriler almak için kategorilere categoriesId ve son bir SELECT almak için products_categories üzerinde ürün verilerini, ikinci SELECT almak ürünlerde SELECT bir ilktir. İdeal olarak, filtre ve sıralama başka tipik örneği yüzden bir products_images olurdu

kullanıcı bunları istediği sırasına göre ürün resimleri sipariş etmek isteyen olacaktır

SELECT `id`,`productsId`,`categoriesId`,`orderBy`,`main` FROM `products_categories` WHERE `productsId` IN (180) WHERE main = 1 ORDER BY `orderBy` DESC 

gibi 2 SELECT uygulanması gerektiğini tablo

id,image,productsID,orderBy 

ve

SELECT from products_images WHERE productsId In (180) ORDER BY orderBy ASC 
isteyeyim

Bu mümkün mü?

DÜZENLEME: Şemaya bağlı olarak ihtiyaç duyduğum şeyi almak için bir ara tablo için gereken ilişki. Buradaki işlev, ara tabloya değil, nihai sonuca erişmemi sağlayan işlevdir.

+0

Ara tablodan ne demek istiyorsunuz? Söylediğim gibi, tabloları unutmalısın, geridönüş, bunun üstüne bir soyutlama sağlıyor. Ya modelin özelliklerini okumak/yazmak istersiniz, ya da başka bir modelden (örneğin, Ürün n ° 5) ilgili modelleri tanımlamak istersiniz. – Overdrivr

cevap

4

Sorunlarınızı tam olarak anlayamadığımdan emin değilim, ancak emin olun ki masa konseptinden uzaklaşıp probleminizi Modeller ve İlişkiler açısından ifade etmelisiniz.

Gördüğüm şekilde iki modeliniz var Ürün (properties: title) ve Category (properties: main).

Ardından, potansiyel, ikisi arasında

  • Product belongsTo Category
  • Category hasMany Product

ilişkilere sahip olabilir Bu kategoride birçok ürün içerebilir ederken, bir ürün, bir tek bir kategoriye ait anlamına gelir .other relations available

, özelliklerine (sizin durumunuzda main benzeri) fonksiyonu öğeleri almak için GET istekleri filtre uygulayabilir veya (eğer ilişkileri eklediğinizde otomatik olarak oluşturulur) istekleri GET özel kullanmak oluşturulan DİNLENME API kullanarak, Sonra vardır Örneğin belirli bir kategoriye ait tüm ürünleri edinin.

Bu yardımcı olur mu?

3

Burada neye benzediğine bağlı olarak, ilişkiyi tanımlarken scope seçeneğini kullanmanızı öneririz. Loopback dokümanlar example of the "product - category" scenario çok benzer bir gösterir: Yukarıdaki örnekte

Product.hasMany(Category, { 
    as: 'categories', 
    scope: function(instance, filter) { 
     return { type: instance.type }; 
    } 
}); 

, instance eşleşti olan bir kategoridir ve her bir ürünün bu Product için eşleşen Category varlıkları içerecektir yeni categories özelliği olurdu. Bunun tam veri düzeninizi takip etmediğini unutmayın, bu yüzden onunla oynamanız gerekebilir. Product.js içinde/uzaktan yöntem

/api/Products/13?filter{"include":["categories"]}

+0

Bu yoldan aşağı iniyorum ama başarıya ulaşamıyorum. Şey, ara masayı ve sentaksı kapsamalıyım, ben ve örnek örnekler son modele erişim sağlıyor. Bu noktada bir şeyleri filtreleyebileceğini varsayalım, ancak DB'yi sorguladığınız kadar verimli değil. Sorgulama için gerekli olan ilişkiyi bulmak için gereken ilişkiye örnek olarak baktım – mbouclas

2

Sana özel bir tanımlamak önermek: Ayrıca, ben API sorgusu yüklü categories ilgili veriler (bu varsayılan olarak dahil değildir) istediğinizi belirtmek gerekir düşünüyorum Bu sizin için iş yapar.

Product.getCategories(_productId){ 
    // if you are taking product title as param instead of _productId, 
    // you will first need to find product ID 
    // then execute a find query on products_categories with 
    // 1. where filter to get only main categoris and productId = _productId 
    // 2. include filter to include product and category objects 
    // 3. orderBy filter to sort items based on orderBy column 

    // now you will get an array of products_categories. 
    // Each item/object in the array will have nested objects of Product and Category. 
} 
+0

Gerçekten de bu konuda bir yol var ama geridönüşümdeki tüm ilişkilere meydan okuyor. Bununla ilgili daha "geridönüş" bir yol arıyordum. Gerçekler, DB'niz Mongo veya herhangi bir NoSQL referenceMany ilişkisini kullanarak yapılabilir, ancak bir SQL tarzında bunu yapmak için yapılabilir. – mbouclas

İlgili konular