Laravel 11 Has Many Through Relationship Example
In this article, I will show you how to use has many through relationship in laravel 11 application. we will use hasManyThrough() method for has many through relationship.
In Laravel, a "Has Many Through" relationship lets you access distant relationships. In our scenario, we have three tables: "users," "posts," and "countries." A user can have many posts, and each post belongs to a country. Using "Has Many Through," we can directly access posts from a country. It simplifies queries, allowing for seamless navigation through multiple related tables.
Has Many Through Relationship will use "hasManyThrough()" for relation.
Create Migrations:
Now we have to create migration of "users", "posts" and "countries" table. we will also add foreign key with users and posts table. so let's create like as below:
users table migration:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->foreignId('country_id')->constrained('countries');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('users');
}
};
posts table migration:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string("name");
$table->foreignId('user_id')->constrained('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('posts');
}
};
countries table migration:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('countries', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('countries');
}
};
Create Models:
Here, we will create Country model. we will also use "hasManyThrough()" for relationship of both model.
Country Model:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
class Country extends Model
{
use HasFactory;
/**
* Write code on Method
*
* @return response()
*/
public function posts(): HasManyThrough
{
return $this->hasManyThrough(
Post::class,
User::class,
'country_id', /* Foreign key on users table... */
'user_id', /* Foreign key on posts table... */
'id', /* Local key on countries table... */
'id' /* Local key on users table... */
);
}
}
Retrieve Records:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Country;
class UserController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index(Request $request)
{
$country = Country::find(1);
dd($country->posts);
}
}
I hope you understand of one to one relationship...
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- How to Create Custom Error Page in Laravel 11?
- How to Get Current Full URL in Laravel 11?
- How to Generate QR Code in Laravel 11?
- Laravel 11 Resize Image Before Upload Example
- Laravel 11 Model Events Example Tutorial
- Laravel 11 Multi Auth: Create Multiple Authentication in Laravel 11
- Laravel 11 Generate Fake Data using Factory Tinker Example
- Laravel 11 Guzzle HTTP Request Example
- Laravel 11 Ajax Request Example Tutorial
- Laravel 11 Ajax Form Validation Example Tutorial
- Laravel 11 Ajax Image Upload Example
- Laravel 11 Import Export Excel and CSV File Tutorial
- Laravel 11 Generate PDF File using DomPDF Example
- Laravel 11 CRUD Application Example Tutorial