First of all we make model and migration files that we want
php artisan make:migration create_users_table php artisan make:migration create_phones_table php artisan make:migration create_books_table php artisan make:migration create_roles_table php artisan make:migration create_role_user_table And then you can make models in the other commands
php artisan make:model User php artisan make:model Phone php artisan make:model Book php artisan make:model Role Common Column Types
It can be id and it is Alias of $table->bigIncrements('id').
$table->id(); It can be use for foreign id in a table and it is Alias of $table->unsignedBigInteger('user_id').
$table->foreignId('user_id'); BOOLEAN equivalent column.
$table->boolean('confirmed'); DATE equivalent column.
$table->date('created_at'); DATETIME equivalent column with precision (total digits).
$table->dateTime('created_at', 0); ENUM equivalent column.
$table->enum('level', ['easy', 'hard']); INTEGER equivalent column.
$table->integer('votes'); JSON equivalent column.
$table->json('options'); LONGTEXT equivalent column.
$table->longText('description'); MEDIUMTEXT equivalent column.
$table->mediumText('description'); TEXT equivalent column.
$table->text('description'); VARCHAR equivalent column with a length.
$table->string('name', 100); Column Modifiers
Specify a "default" value for the column
->default($value) Allows (by default) NULL values to be inserted into the column
->nullable() Place the column "after" another column (MySQL)column
->after('column') Place the column "first" in the table (MySQL)
->first() Set INTEGER columns as UNSIGNED (MySQL)
->unsigned() Foreign Key Constraints
Schema::table('posts', function (Blueprint $table) { $table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); }); Now let's start with one to one ralation
one to one
Imagine that you have user table and phone table and which user has only one phone
2020_06_15_00_create_users_table.php
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(); }); } 2020_06_15_01_create_phones_table.php
public function up() { Schema::create('phones', function (Blueprint $table) { $table->id(); $table->string('phone_number'); $table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->timestamps(); }); } User.php
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; public function phone() { return $this->hasOne('App\Phone'); } } Post.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { public function user() { return $this->belongsTo('App\User'); } } How use it
$phone = User::find(1)->phone; one to many
For example we have book table and each user can have many books
2020_06_15_03_create_books_table.php
public function up() { Schema::create('books', function (Blueprint $table) { $table->id(); $table->string('name'); $table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->timestamps(); }); } User.php
<?php namespace App; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; public function phone() { return $this->hasOne('App\Phone'); } public function books() { return $this->hasMany('App\Book'); } } Book.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { public function user() { return $this->belongsTo('App\User'); } } How to use it
$books = App\User::find(1)->books; foreach ($books as $book) { // } $book = App\Post::User(1)->books()->where('name', 'foo')->first(); Or you can give user from book
$book = App\Comment::find(1); echo $book->user->name; Many To Many
For example imagine user's roles
Each user can have many roles and each role can be assigned to many users
2020_06_15_03_create_roles_table.php
public function up() { Schema::create('roles', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); } 2020_06_15_03_create_role_user_table.php
public function up() { Schema::create('role_user', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('user_id'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->unsignedBigInteger('role_id'); $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); $table->timestamps(); }); } How to use it
$user = App\User::find(1); foreach ($user->roles as $role) { // } $roles = App\User::find(1)->roles()->orderBy('name')->get(); Or you can give user from book
$user = App\User::find(1); foreach ($user->roles as $role) { echo $role->pivot->created_at; } Feel free to ask any questions 🙂🙃
Top comments (1)
one to one example you use phone but created Post.php