19-Apr-2023
.
Admin
Hi friends,
Today, I am explaining laravel 10 one-to-one relationship tutorial with examples. One to One model relationship is very simple and basic. When one table refers to a single row in another table that is called a one-to-one relationship. This tutorial will see how the One To One Relationship in Laravel 10 is working with an example.
Eloquent relationships are defined as methods in your Eloquent model classes. Inside this article we will see the concept of Laravel 10 One to One Eloquent relationship as well as we will implement the inverse of one-to-one relationship i.e belongs to.
So let's start following example:
Download Laravel
Let us begin the tutorial by installing a new laravel application. if you have already created the project, then skip the following step.
composer create-project laravel/laravel example-app
Add Migrations
Now we have to create a migration of the "users" and "phones" table. we will also add a foreign key to users table. so let's create like as below:
database/migrations/2014_10_12_000000_create_Users_table.php
<?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()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
};
phones table migration:
php artisan make:migration create_phones_table
database/migrations/2014_10_12_000000_create_phones_table.php
<?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()
{
Schema::create('phones', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained('users');
$table->string('phone');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('phones');
}
};
Add Models:
Here, we will create a User and Phone table model. we will also use "hasOne()" and "belongsTo()" for relationship of both model.
app/Models/User.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
/**
* Get the phone associated with the user.
*
* Syntax: return $this->hasOne(Phone::class, 'foreign_key', 'local_key');
*
* Example: return $this->hasOne(Phone::class, 'user_id', 'id');
*/
public function phone()
{
return $this->hasOne(Phone::class);
}
}
php artisan make:model Phone
app/Models/Phone.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
use HasFactory;
/**
* Get the user that owns the phone.
*
* Syntax: return $this->belongsTo(Phone::class, 'foreign_key', 'owner_key');
*
* Example: return $this->belongsTo(Phone::class, 'user_id', 'id');
*/
public function user()
{
return $this->belongsTo(User::class);
}
}
Retrieve Records:
app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index(Request $request)
{
$phone = User::find(1)->phone;
dd($phone);
}
}
app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Phone;
class UserController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index(Request $request)
{
$user = Phone::find(1)->user;
dd($user);
}
}
Add Records:
app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Phone;
class UserController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index(Request $request)
{
$user = User::find(1);
$phone = new Phone;
$phone->phone = '9429343852';
$user->phone()->save($phone);
}
}
app/Http/Controllers/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Phone;
class UserController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index(Request $request)
{
$phone = Phone::find(1);
$user = User::find(10);
$phone->user()->associate($user)->save();
}
}
It will help you...
#Laravel 10