• Post
  • Category
  • Tags
  • About Us
  • Contact Us
Quick Links

Laravel 10 One To Many Polymorphic Relationship

Aug-02-2023 | Laravel PHP

As a web developer, I understand the significance of creating flexible and scalable database relationships to build dynamic and interactive applications. In my journey with Laravel, my preferred PHP framework, I have been continuously impressed by its powerful features and elegant solutions for managing complex data connections.

Among these features, the "One To Many Polymorphic" relationship has stood out as an invaluable tool, empowering me to establish dynamic associations between different models and enabling seamless data sharing across diverse entities.

In this article, I will take you on a guided tour of the Laravel 10 One To Many Polymorphic relationship and its potential to revolutionize how we connect the "Post," "Comment," and "Video" tables in our database.

By harnessing the capabilities of this relationship, I can efficiently manage comments and interactions on posts while also creating a unified system to handle comments on videos, all while adhering to the principles of good database design.

Throughout our exploration, we will dive deep into the process of setting up the "Post," "Comment," and "Video" tables, defining eloquent models, and configuring the One To Many Polymorphic relationship.

To make things more tangible, I will provide real-world examples that demonstrate how this relationship can be practically applied in various scenarios, giving you a comprehensive understanding of its versatility.

A one-to-many polymorphic relation is similar to a typical one-to-many relation. The child model can belong to more than one type of model using a single association. One to many polymorphic relationship is used when a model belongs to more than one other model on a single association model.

So, let us embark on this enriching journey together, uncovering the power of the Laravel 10 One To Many Polymorphic relationship.

For example, users of your application can comment on posts and videos. Using polymorphic relationships, you may use a single comments table to contain comments for both posts and videos. using morphMany() and morphTo() you can access data.

In this example, we will create posts, comments, and videos tables. All tables are connected with each other like the below screenshot and we are creating migration and model for all tables and retrieving data using one to many polymorphic relationships in laravel 7, laravel 8, and laravel 9.

laravel_10_one_to_many_polymorphic_relationship_example

 

Create Migration

Post Table

Create a migration file for the "posts" table using the following command.

php artisan make:migration create_posts_table

Open the generated migration file located in the "database/migrations" directory and define the schema for the "posts" table. 

Schema::create('posts', function (Blueprint $table) {

    $table->increments('id');

    $table->string("name");

    $table->timestamps();

});

Comment Table

Create a migration file for the "comments" table using the following command.

php artisan make:migration create_comments_table

Open the generated migration file and define the schema for the "comments" table, including the necessary foreign key for the polymorphic relationship. 

Schema::create('comments', function (Blueprint $table) {

    $table->increments('id');

    $table->text("comments");

    $table->integer('commentable_id');

    $table->string("commentable_type");

    $table->timestamps();

});

Video Table

Create a migration file for the "videos" table using the following command.

php artisan make:migration create_videos_table

Open the generated migration file and define the schema for the "videos" table. 

Schema::create('videos', function (Blueprint $table) {

    $table->increments('id');

    $table->string("title");

    $table->timestamps();

});

 

Read Also: Laravel 10 Has Many Through Relationship Example

 

Create Model

Post Model

Create a new model file for the "Post" model using the following command.

php artisan make:model Post

Open the generated "Post" model file located in the "app/Models" directory and define the model. 

class Post extends Model
{
    /**
     * Get all of the post's comments.
     */
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

Comment Model

Create a new model file for the "Comment" model using the following command.

php artisan make:model Comment

Open the generated "Comment" model file and define the model. 

class Comment extends Model
{
    /**
     * Get the parent commentable model (post or video).
     */
    public function commentable()
    {
        return $this->morphTo();
    }
}

Video Model

Create a new model file for the "Video" model using the following command.

php artisan make:model Video

Open the generated "Video" model file and define the model. 

class Video extends Model
{
    /**
     * Get all of the video's comments.
     */
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

In the "Post" and "Video" models, we have defined the morphMany relationship with the "Comment" model. This relationship allows us to easily retrieve all comments associated with a specific post or video.

In the "Comment" model, we have defined the morphTo relationship. This relationship enables us to access the parent "commentable" model, whether it's a post or a video, dynamically based on the "commentable_type" and "commentable_id" columns in the "comments" table.

 

Retrieve Record

Once your database table and models are defined, you may access the relationships via your model's dynamic relationship properties. For example, to access all of the comments for a post, we can use the comments property.

$post = Post::find(1);

foreach ($post->comments as $comment) {
    //
}

You may also retrieve the parent of a polymorphic child model by accessing the name of the method like the below code.

$comment = Comment::find(1);

$commentable = $comment->commentable;

 

Create Record

Now, we will give you an example of creating the record for one to many polymorphic relationships like the below code. 

$post = Post::find(1);	
 
$comment = new Comment;
$comment->comments = "this is test comments";
 
$post->comments()->save($comment);

 


You might also like:

  • Read Also: Laravel 10 REST API CRUD Operation
  • Read Also: Laravel 10 many to many Relationship Example
  • Read Also: Laravel 10 one to many Relationship Example
  • Read Also: Building Complete CRUD Application in Laravel 10


Laravel
PHP
Laravel 10

RECOMMENDED ARTICLES

Reading articles is highly recommended for skill improvement and knowledge acquisition.

  • How to Create Multiple Authentication in Laravel 10
  • Laravel 10 many to many Relationship Example
  • Laravel 10 Has Many Through Relationship Example
  • Python Data Types and Variables Example
  • Laravel 10 Google Pie Chart Example
  • AJAX CRUD Operations In Laravel 10: Step-by-Step Guide
  • How to Delete Relationship Records in Laravel 10
  • Laravel 10 One To Many Polymorphic Relationship
  • Laravel 10 React Auth Scaffolding Example
  • How to Write in Excel File using Openpyxl in Python

CATEGORIES

Web development languages can be categorized into different categories.

Laravel
PHP
jQuery
MySQL
CSS
HTML
Bootstrap
Vue JS
Node.js
Other
Python
React JS
Angular
React Native

TAGS

These tags can be used to categorize and organize content related to web development.

Location
Tinker
Stripe
Checkbox
Email
Authentication
Google Recaptcha Code
TinyMCE Editor
Dompdf
Artisan

RECENT ARTICLES

The recent article focuses on the latest developments to gain new knowledge.

  • 10 Digit Mobile Number Validation i...
  • How to Create Autocomplete Search i...
  • How to Create Autocomplete Search i...
  • How to Add Soft Delete in Laravel 1...
  • How to Delete Relationship Records...
  • How to Send SMS using Twilio in Lar...
  • How to Create Multiple Authenticati...
  • Laravel 10 React Auth Scaffolding E...
  • PHP vs Python: Which is Best for We...
  • How to use Unique Validation on Upd...
Vidvatek
Post
Category
Tags
About Us
Contact Us
Quick Links

Copyright © Vidvatek 2023
Privacy Policy · Terms & Conditions · Disclaimer