Skip to content
Home Tutorials Roadmaps Courses
Log in Join free
Tutorials Laravel Eloquent Relationships
Laravel Advanced FREE

Eloquent Relationships

Lesson 3 of 17 Advanced Interactive

Eloquent defines relationships between models.

Types

  • hasOne / hasMany � one-to-one/many
  • belongsTo � inverse relationship
  • belongsToMany � many-to-many (pivot table)
  • morphMany / morphTo � polymorphic

Syntax

LARAVEL
class User extends Model {
    public function posts() { return $this->hasMany(Post::class); }
    public function profile() { return $this->hasOne(Profile::class); }
}
class Post extends Model {
    public function user() { return $this->belongsTo(User::class); }
    public function tags() { return $this->belongsToMany(Tag::class); }
}
Eloquent Relationships
PHP
<?php
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // One-to-many
    public function posts()
    {
        return $this->hasMany(Post::class);
    }

    // Many-to-many
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }

    // Has-many-through
    public function comments()
    {
        return $this->hasManyThrough(Comment::class, Post::class);
    }
}

// Usage
$user = User::with("posts.roles")->find(1);
foreach ($user->posts as $post) {
    echo $post->title;
}

Practice

1
Exercise

Define many-to-many between courses and students.

Answer
class Course extends Model {
    public function students() {
        return $this->belongsToMany(Student::class);
    }
}

Quick Quiz

1

belongsToMany needs what?

Many-to-many requires a pivot table.

Interview Questions

Using with() to fetch related models in one query, avoiding the N+1 query problem.