One-to-many relationships let you connect one item to many related items easily. It helps organize data that belongs together.
You have a blog post with many comments.
A user owns multiple orders in an online shop.
A category contains many products.
An author writes many books.
Syntax
Laravel
public function relatedItems()
{
return $this->hasMany(RelatedItem::class);
}
This method goes inside the main model class.
Replace relatedItems and RelatedItem with your actual names.
Examples
This example shows a Post model with many Comment models.
Laravel
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
A User can have many Orders linked this way.
Laravel
class User extends Model
{
public function orders()
{
return $this->hasMany(Order::class);
}
}
Sample Program
This Author model has many Book models. When you get an author, you can list all their books easily.
Laravel
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
public function books()
{
return $this->hasMany(Book::class);
}
}
// Usage example in a controller or tinker:
$author = Author::find(1);
foreach ($author->books as $book) {
echo $book->title . "\n";
}
OutputSuccess
Important Notes
Make sure your related table has a foreign key column named like author_id by default.
You can customize the foreign key and local key by passing extra arguments to hasMany().
Summary
One-to-many connects one model to many related models.
Define a method returning hasMany() in the main model.
Use it to easily access all related items for one record.
Practice
(1/5)
1. What does the hasMany relationship represent in Laravel?
easy
A. One model has many related models
B. Many models belong to one model
C. One model belongs to one other model
D. Many models have many related models
Solution
Step 1: Understand relationship types
Laravel defines relationships to connect models. hasMany means one model owns many related models.
Step 2: Match relationship to description
hasMany is used when one record relates to multiple records in another table.
Final Answer:
One model has many related models -> Option A
Quick Check:
hasMany = one-to-many [OK]
Hint: hasMany means one owns many others [OK]
Common Mistakes:
Confusing hasMany with belongsTo
Thinking hasMany means many-to-many
Mixing up owner and owned models
2. Which of the following is the correct way to define a hasMany relationship in a Laravel model?
easy
A. public function comments() { return $this->belongsTo(Comment::class); }
B. public function comments() { return $this->hasMany(Comment::class); }
C. public function comments() { return $this->hasOne(Comment::class); }
D. public function comments() { return $this->belongsToMany(Comment::class); }
Solution
Step 1: Identify correct method for one-to-many
In Laravel, hasMany() defines one-to-many relations.
Step 2: Match method to code
public function comments() { return $this->hasMany(Comment::class); } uses hasMany(Comment::class), which is correct syntax.
Final Answer:
public function comments() { return $this->hasMany(Comment::class); } -> Option B
Quick Check:
hasMany() method syntax = public function comments() { return $this->hasMany(Comment::class); } [OK]
Hint: Use hasMany() to link one model to many [OK]
Common Mistakes:
Using belongsTo instead of hasMany
Using hasOne for multiple related models
Forgetting to return the relationship
3. Given the following models, what will $post->comments->count() output if the post has 3 related comments?
class Post extends Model {
public function comments() {
return $this->hasMany(Comment::class);
}
}
medium
A. 0
B. An error
C. null
D. 3
Solution
Step 1: Understand hasMany returns a collection
The comments() method returns all related Comment models as a collection.
Step 2: Count related comments
Calling $post->comments->count() counts the number of related comments. Since there are 3, it returns 3.
Final Answer:
3 -> Option D
Quick Check:
Related comments count = 3 [OK]
Hint: hasMany returns collection; count() gives number of related items [OK]
Common Mistakes:
Expecting count() to return null
Confusing count() with count property
Assuming hasMany returns a single model
4. What is wrong with this hasMany relationship definition?
public function comments() {
return $this->hasMany('App\Models\Comment');
}
medium
A. The method should return an array, not a relationship
B. hasMany should be replaced with belongsTo
C. The model class should be imported or use ::class constant
D. The method must be static
Solution
Step 1: Check model reference style
Using a string for model class works but is discouraged; better to import and use Comment::class.
Step 2: Identify best practice
Importing the model and using Comment::class avoids typos and enables IDE support.
Final Answer:
The model class should be imported or use ::class constant -> Option C
Quick Check:
Use ::class for model references [OK]
Hint: Use ::class for model names, not strings [OK]
Common Mistakes:
Using string class names without import
Confusing hasMany with belongsTo
Making relationship methods static
5. You have a User model and a Post model. Each user can have many posts. How do you retrieve all posts for a user with ID 5 using Eloquent's hasMany relationship?
hard
A. $posts = User::find(5)->posts;
B. $posts = Post::where('user_id', 5)->get();
C. $posts = User::posts()->where('id', 5)->get();
D. $posts = User::find(5)->hasMany(Post::class);
Solution
Step 1: Use find() to get user by ID
User::find(5) fetches the user with ID 5.
Step 2: Access posts via hasMany relationship
Accessing ->posts returns all posts related to that user.
Final Answer:
$posts = User::find(5)->posts; -> Option A
Quick Check:
Retrieve related posts via user->posts [OK]
Hint: Find user then access posts property [OK]
Common Mistakes:
Calling hasMany() directly on model instance
Using where on User model instead of Post
Trying to call posts() statically
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.