简体   繁体   中英

How to include the 'many' part of a relation from the 'one of many' model?

I'm trying to get a product, including the category that it is a part of. A category of course has many products and a product is a part of one category. I do this like this.

Product.find({include: 'Categories'})

When I try to execute this query, I get an error. 'Relation "Categories" is not defined for Product model'.

I've defined this relation as according to the loopback docs found here: https://docs.strongloop.com/display/public/LB/HasMany+relations . As one category has many products. That looks as follows:

category.json

"relations": {
  "products": {
    "type": "hasMany",
    "model": "Product",
    "foreignKey": "categoryId"
  }
},

Nothing is defined in products.json. I've checked the plurals of course, but they all check out.

When I try to get all products for all categories, it works without a problem. I'm pretty sure this is intended. But how am I supposed to do this the other way around? I already tried to define a relation in Product as hasOne, documented here: https://docs.strongloop.com/display/public/LB/HasOne+relations . But this requires a foreign key in the other object so that's obviously only meant for a 1-to-1 relation. Other than that I'm kind of stumped... Any ideas?

When you are including it from product side, you have to create that relation in product.json

As you mentioned, a product only belongs to one category - that means relation name should be category.

Think of it as something like, loopback will call a function Product.category

Add following snippet in product.json

"relations": {
  "category": {
    "type": "belongsTo",
    "model": "Category",
    "foreignKey": "categoryId"
  }
},

Now try -

Product.find({include: 'category'})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM