Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Associations (hasMany, belongsTo) in Express with Sequelize
📖 Scenario: You are building a simple blog backend using Express and Sequelize. You want to model the relationship between Authors and their Posts. Each author can write many posts, and each post belongs to one author.
🎯 Goal: Create Sequelize models for Author and Post with the correct hasMany and belongsTo associations.
📋 What You'll Learn
Create a Sequelize model called Author with a name field of type STRING.
Create a Sequelize model called Post with a title field of type STRING.
Define a hasMany association from Author to Post.
Define a belongsTo association from Post to Author.
💡 Why This Matters
🌍 Real World
Modeling relationships between entities like authors and posts is common in blog platforms and content management systems.
💼 Career
Understanding how to define and use associations in Sequelize is essential for backend developers working with Node.js and relational databases.
Progress0 / 4 steps
1
Create Sequelize models for Author and Post
Create a Sequelize model called Author with a name field of type Sequelize.STRING. Also create a Sequelize model called Post with a title field of type Sequelize.STRING. Use sequelize.define for both models.
Express
Hint
Use sequelize.define('ModelName', { fieldName: DataTypes.TYPE }) to create models.
2
Create association variable for hasMany
Create a variable called authorHasManyPosts and assign it the association where AuthorhasManyPost.
Express
Hint
Use Author.hasMany(Post) and assign it to authorHasManyPosts.
3
Create association variable for belongsTo
Create a variable called postBelongsToAuthor and assign it the association where PostbelongsToAuthor.
Express
Hint
Use Post.belongsTo(Author) and assign it to postBelongsToAuthor.
4
Synchronize models with the database
Add a line to synchronize the Sequelize models with the database by calling sequelize.sync().
Express
Hint
Call sequelize.sync() to create tables based on the models and associations.
Practice
(1/5)
1. In Express with Sequelize, what does the hasMany association represent between two models?
easy
A. One model instance can have multiple related instances of another model.
B. One model instance belongs to exactly one instance of another model.
C. Two models have no relationship.
D. Models share the same database table.
Solution
Step 1: Understand the meaning of hasMany
The hasMany association means one record in a model can be linked to many records in another model.
Step 2: Compare with other associations
belongsTo means one record belongs to one other record, not many.
Final Answer:
One model instance can have multiple related instances of another model. -> Option A
Quick Check:
hasMany = one-to-many [OK]
Hint: hasMany means one item links to many others [OK]
Common Mistakes:
Confusing hasMany with belongsTo
Thinking hasMany means no relation
Assuming hasMany means shared tables
2. Which of the following is the correct syntax to define a belongsTo association in Sequelize for a model Comment that belongs to Post?
easy
A. Comment.belongsTo(Post);
B. Post.belongsTo(Comment);
C. Comment.hasMany(Post);
D. Post.hasMany(Comment);
Solution
Step 1: Identify the direction of belongsTo
The model that belongs to another calls belongsTo on itself with the other model as argument.
Step 2: Apply to Comment and Post
Since Comment belongs to Post, the syntax is Comment.belongsTo(Post);.
Final Answer:
Comment.belongsTo(Post); -> Option A
Quick Check:
belongsTo called on child model [OK]
Hint: belongsTo called on the model that belongs [OK]
Common Mistakes:
Reversing the models in belongsTo
Using hasMany instead of belongsTo
Calling belongsTo on the wrong model
3. Given the following Sequelize association code:
Author.hasMany(Book);
Book.belongsTo(Author);
What will await author.getBooks() return if author is an Author instance?
medium
A. An error because belongsTo is missing.
B. An array of Book instances related to that author.
C. Undefined, because getBooks is not a valid method.
D. A single Book instance related to that author.
Solution
Step 1: Understand hasMany and belongsTo setup
Author has many Books, and each Book belongs to one Author, so Sequelize creates methods like getBooks on Author instances.
Step 2: Check what getBooks returns
getBooks returns an array of all Book instances linked to that Author.
Final Answer:
An array of Book instances related to that author. -> Option B
Quick Check:
hasMany creates plural get method returning array [OK]
4. Consider this Sequelize association code with an error:
Order.hasMany(Item);
Item.belongsTo(Order);
// Later in code
const order = await Order.findByPk(1);
const items = await order.getItem();
What is the error and how to fix it?
medium
A. Order should use belongsTo, not hasMany.
B. belongsTo should be called on Order, not Item.
C. Method getItem() is incorrect; should be getItems() because hasMany creates plural getter.
D. findByPk is not a valid Sequelize method.
Solution
Step 1: Identify the association methods
Order hasMany Item means Sequelize creates getItems() method on Order instances, not getItem().
Step 2: Fix the method call
Change order.getItem() to order.getItems() to correctly fetch related items.
Final Answer:
Method getItem() is incorrect; should be getItems() because hasMany creates plural getter. -> Option C
Quick Check:
hasMany creates plural get method [OK]
Hint: hasMany creates plural get method, use getItems() [OK]
Common Mistakes:
Using singular get method for hasMany
Confusing belongsTo direction
Thinking findByPk is invalid
5. You have two models: User and Profile. Each User has one Profile, and each Profile belongs to one User. Which Sequelize associations correctly represent this, and what methods will be available on User instances?
hard
A. User.belongsTo(Profile); Profile.hasOne(User); with user.getProfile() method.
B. User.hasMany(Profile); Profile.belongsTo(User); with user.getProfiles() method.
C. Profile.hasOne(User); User.belongsTo(Profile); with user.getProfile() method.
D. User.hasOne(Profile); Profile.belongsTo(User); with user.getProfile() method.
Solution
Step 1: Identify one-to-one relationship
Each User has one Profile means hasOne is used, not hasMany.
Step 2: Set belongsTo on Profile
Profile belongs to User, so Profile.belongsTo(User); is correct.
Step 3: Check available methods
User instances get getProfile() method for the single related Profile.
Final Answer:
User.hasOne(Profile); Profile.belongsTo(User); with user.getProfile() method. -> Option D
Quick Check:
One-to-one uses hasOne + belongsTo [OK]
Hint: One-to-one uses hasOne + belongsTo with singular get method [OK]