In this example we will see laravel 8 has many through relationship example. hasManyThrough relationship difficult to understand compare to other relationship. you use hasManyThrough relationship laravel 6, laravel 7 and laravel 8. The has-many-through relationship provides a convenient way to access distant relations via an intermediate relation.
For example, a categories is connected with products and products connected with orders, then we can access all orders connected with a specific categories. So, simply you can access or get data using intermediate model relation using hasManyThrough in laravel 8.
Now, we will create categories, products and orders table. categories table connected with products and products table connected with orders table like below screenshot and we also create migration and model for all table and retrive data using model.
Categories Table :
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
Products Table :
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->integer('categories_id')->unsigned();
$table->timestamps();
$table->foreign('categories_id')->references('id')->on('categories')->onDelete('cascade');
});
Orders Table :
Schema::create('orders', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned();
$table->timestamps();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
});
Now, we will create categories model and define relationship on model.
Category Model :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function order()
{
return $this->hasManyThrough(Order::class, Product::class);
}
}
The first argument passed to the hasManyThrough
method is the name of the final model we wish to access, while the second argument is the name of the intermediate model.
Though the Order model table does not contain category_id column, the hasManyThrough relation we can access to $categories->orders like this.
Now, retrive record using intermediate model through like below code example.
$category = Category::find(1);
dd($category->order);
You might also like :
in this tutorial, we see how to get last 30 days record in laravel 8. You can simply get the last 30 days reco...
Feb-02-2022
In this article, we will see how to get a client's IP address in laravel 9. Many times you need a user IP addre...
Oct-26-2022
In this article, we will see how to remove a specific item from an array in javascript. We will use the indexOf() m...
Nov-03-2022
Have you ever seen those pop-up boxes on websites? They're called modal forms, and they make it easier to do things...
Jan-04-2023