laravel database migrations
このチュートリアルでは、Laravelデータベースの処理、移行、シード、生のSQLクエリ、Eloquentモデル、Eloquentリレーションシップ、Artisan、Tinkerについて説明します。
の前のチュートリアルでは Laravelチュートリアルシリーズ 、Laravelフレームワークのアーキテクチャ、インストール、コンポーネントについて学びました。 LaravelPHPプロジェクトの構造を詳しく見てきました。
このチュートリアルでは、Laravelデータベース、移行、シード、生のSQLクエリの実行、Eloquentモデル、Eloquentリレーションシップ、Artisan、Tinkerについて説明します。すべての例でLaravelバージョン7を使用しました。
学習内容:
Laravelデータベースの相互作用
Laravelフレームワークはを使用してデータベースと対話します 生のSQL、流暢なクエリビルダー、 そしてその 雄弁なORM 。 以下の4つのデータベースをサポートします。
- MySQLバージョン5.6以降
- PostgreSQL(Postgres)バージョン9.4以降
- SQLiteバージョン3.8.8以降
- SQLServerバージョン2017+
プロジェクトをMySQLデータベースに接続する手順:
ステップ1: 新しいを作成します データベース 名前付き db_ 学校 (適切な名前を使用できます) phpMyadmin または HeidiSQL 。
ステップ2: 名前の付いた新しいプロジェクトを作成します 学校 (適切な名前を使用できます)。
注意:Laravelをインストールして新しいプロジェクトを作成する方法がわからない場合は、前のチュートリアル「初心者向けLaravelチュートリアル1」を参照してください。
ステップ3: IDEでプロジェクトを開き、 .env ファイル。の値を変更します DB_DATABASE (データベース名)から db_アカデミー (適切な名前を使用できます)。両方 データベース名 との値 DB_DATABASE の中に .env ファイルは同じでなければなりません。
注意 :データベース構成によっては、DB_USERNAME、DB_PASSWODなどの.envファイル内の他のデータベースパラメータを変更する必要がある場合があります。
次のスクリーンショットは、.envファイルのデータベース構成を示しています。
Laravelの移行
Laravel Migrationは、データベーステーブルの作成に使用される特別な機能です。デフォルトでは、 xxxx_xx_xx_xxxxxx _create_users_table.php ファイルと xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php ファイルが含まれています。
Laravel移行の構造
LaravelMigrationクラスは次の2つのメソッドを使用します。
- up()メソッド: このメソッドは、データベースに新しいテーブル、列、またはインデックスを作成するために使用されます。
- down()メソッド: このメソッドは、データベース内の既存のテーブル、列、またはインデックスを削除するために使用されます。このメソッドは、up()メソッドの反対のメソッドです。
Laravel移行の作成
コマンドプロンプトで次のコマンドを実行して、と呼ばれる移行を作成します create_tutors_table 。
php artisan make:migrationcreate_tutors_table
上記のコマンドを実行すると、という名前のファイルが作成されます xxxx_xx_xx_xxxxxx_create_tutors_table.php の中に データベース/移行 ディレクトリ。
を開きます xxxx_xx_xx_xxxxxx_create_tutors_table.php 以下に示すように、既存のコードをファイルして変更します。
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Laravel移行の実行
コマンドプロンプトで次のコマンドを実行して、使用可能なすべての移行を実行します。
php artisan migrate
上記のコマンドは、以下に示すように、データベースに関連するテーブルを作成します。
移行のロールバック
#1)移行の最後のバッチをロールバックする
コマンドプロンプトで次のコマンドを実行して、 移行の最後のバッチ (単一または複数の移行が含まれる場合があります)。
php artisan migrate:rollback
#2)ステップを提供する移行のロールバック
コマンドプロンプトで次のコマンドを実行して、 最後の2つの移行 。
php artisan migrate:rollback --step=2
#3)アプリケーションのすべての移行をロールバックする
コマンドプロンプトで次のコマンドを実行して、 すべての移行をロールバックします アプリケーションの。
php artisan migrate:reset
#4)単一のコマンドを使用したロールバックと移行
コマンドプロンプトで次のコマンドを実行して、 ロールバックして移行する 単一のコマンドを使用します。
php artisan migrate:refresh
#5)ロールバックと移行の制限なし。移行の
コマンドプロンプトで次のコマンドを実行して、 最後の2つの移行をロールバックして移行します 単一のコマンドを使用します。
php artisan migrate:refresh --step=2
#6)すべてのテーブルを削除して移行する
コマンドプロンプトで次のコマンドを実行して、 すべてのテーブルを削除して移行します 。
php artisan migrate:fresh
Laravelシード
アプリケーションを開発するときは、アプリケーションをテストするためのデータが必要です。シードは、テストデータをデータベースに挿入するために使用されます。
シーダーの作成
ステップ1: コマンドプロンプトで次のコマンドを実行して、というシーダーを作成します UserSeeder 。
php artisan make:seederUserSeeder
このコマンドは、という名前のファイルを作成します UserSeeder.php の中に データベース/シード ディレクトリ。
ステップ2: を開きます UserSeeder.php 以下に示すように、既存のコードをファイルして変更します。
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
ステップ3: を開きます DatabaseSeeder.phpファイル の中に データベース/シード ディレクトリを作成し、以下に示すように既存のコードを変更します。
call(UserSeeder::class); } }
注意 : DatabaseSeeder classは、他のシードクラスを呼び出すために使用されます。
ランニングシーダー
ステップ1: コマンドプロンプトで次のコマンドを実行して、 Composerのオートローダーを再生成します 。
composer dump-autoload
ステップ2: コマンドプロンプトで次のコマンドを実行して、 DatabaseSeeder クラス。
php artisan db:seed
上記のコマンドを実行する代わりに、コマンドプロンプトで次のコマンドを実行して、 UserSeeder クラス。
php artisan db:seed --class= UserSeeder
注意 :コマンドプロンプトで次のコマンドを実行して、 すべてのテーブルを削除し、すべての移行を再実行します 。
php artisan migrate:fresh --seed
ステップ3: 挿入されたデータをデータベースで確認します。
データベースには、次のような出力が表示されます。
生のSQLクエリの実行
挿入クエリの実行
ステップ1: 次のコードセグメントをに追加します ルート/web.php 新しいレコードをに挿入するファイル 家庭教師 テーブル。
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
ステップ2: 次のURLにアクセスしてください。 http://academy.test/insert
ステップ3: 挿入されたデータをデータベースで確認します。
データベースには、次のスクリーンショットのような出力が表示されます。
選択クエリの実行
ステップ1: 次のコードセグメントをに追加します ルート/web.php からデータを取得するファイル 家庭教師 持っているテーブル id に等しい 二 。
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
ステップ2: 次のURLにアクセスしてください。 http:/academy.test/select
ステップ3: ブラウザには、次のスクリーンショットのような出力が表示されます。
更新クエリの実行
ステップ1: 次のコードセグメントをに追加します ルート/web.php のレコードを更新するファイル 家庭教師 持っているテーブル id に等しい 1 。
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
ステップ2: 次のURLにアクセスしてください。 http://academy.test/update
ステップ3: 更新されたデータをデータベースで確認します。
データベースには、次の画像のような出力が表示されます。
削除クエリの実行
ステップ1: 次のコードセグメントをに追加します ルート/web.php のレコードを削除するファイル 家庭教師 持っているテーブル id に等しい 1 。
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
ステップ2: 次のURLにアクセスしてください。 http://academy.test/delete
ステップ3: 削除したデータをデータベースで確認します。
データベースには、次の画像のような出力が表示されます。
LaravelEloquentモデル
MVCアーキテクチャでは、文字 M を意味する モデル 。モデルは、アプリケーションによって使用されるデータを処理します。すべてのモデルはに保存されます アプリ ディレクトリ。ザ・ ユーザー モデル( User.php) デフォルトのモデルです。データベースの各テーブルには、対応するEloquentモデルが含まれる場合があります。 たとえば、家庭教師 モデルはデータをに保存します 家庭教師 テーブル。
注意: 特に指定がない限り、クラスの複数形がテーブル名として使用されます。
Eloquentモデルの作成
コマンドプロンプトで次のコマンドを実行して、という名前のモデルを作成します 家庭教師 。
php artisan make:model Tutor
このコマンドは、という名前のファイルを作成します Tutor.php の中に アプリ ディレクトリ。
上記のコマンドの代わりに、コマンドプロンプトで次のコマンドを実行して、 データベースの移行 モデルを作成するとき。
php artisan make:modelTutor --migration
または
php artisan make:modelTutor -m
上記のコマンドは両方とも同じ出力を提供します。
データの挿入
ステップ1: 次のコードセグメントをに追加します ルート/web.php 新しいレコードをに挿入するファイル 家庭教師 テーブル。
PCでepsファイルを開く方法
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
注意 :特性を置く“ App Tutorを使用する ' の中に ルート/web.php 以下に示すようにファイルします。
ステップ2: 次のURLにアクセスしてください。 http://academy.test/insert-data
ステップ3: 挿入されたデータをデータベースで確認します。
データベースには、次の画像のような出力が表示されます。

データの検索
ステップ1: 次のコードセグメントをに追加します ルート/web.php 内のレコードを検索/取得するためのファイル 家庭教師 持っているテーブル id に等しい 二 。
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
ステップ2: 次のURLにアクセスしてください。 http://academy.test/find-data
ステップ3: ブラウザは、次の画像のような出力を表示します。

データの更新
ステップ1: 次のコードセグメントをに追加します ルート/web.php のレコードを更新するファイル 家庭教師 持っているテーブル id に等しい 二 。
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
または
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
ステップ2: 次のURLにアクセスしてください。 http://academy.test/update-data
ステップ3: 更新されたデータをデータベースで確認します。
データベースには、次の画像のような出力が表示されます。

データの削除
ステップ1: 次のコードセグメントをに追加します ルート/web.php のレコードを削除するファイル 家庭教師 持っているテーブル id に等しい 二 。
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
ステップ2: 次のURLにアクセスしてください。 http://academy.test/delete-data
ステップ3: 削除したデータをデータベースで確認します。
データベースには、次の画像のような出力が表示されます。

データのソフト削除
データベースからデータを削除する代わりに、ソフト削除はという属性を設定します delete_at モデル上でそれをデータベーステーブルに挿入します。
次の特性を使用して、ソフト削除を有効にします。
Illuminate Database Eloquent SoftDeletes
次のコードセグメントを使用して、データをソフト削除できます。
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
ソフト削除データを取得する
ザ・ withTrashed() メソッドを使用して ソフト削除データを取得する 以下に示すように。
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
ソフト削除データの復元
ザ・ 戻す() メソッドを使用して ソフト削除データを復元する 以下に示すように。
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
データを完全に削除する
ザ・ forceDelete() メソッドを使用して データを完全に削除する 以下に示すように。
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Laravelの雄弁な関係
雄弁な関係は、データベーステーブルを簡単にリンクするのに役立ちます。
雄弁な関係タイプ
次のリストは、さまざまなタイプの雄弁な関係を示しています。
jsonファイルを表示する方法
- 1対1の関係
- 1対多の関係
- 多対多の関係
- 持っている-ワンスルーの関係
- 持っている-多くの-スルー関係
- 1対1(ポリモーフィック)の関係
- 1対多(多態性)の関係
- 多対多(多形)関係
#1)1対1の関係
説明: これは、異なるテーブルの列間の1対1の関係です。
1対1の関係の例:
hasOne('AppBook); } }
1対1の関係(逆)の例:
belongsTo('App Author); } }
#2)1対多の関係
説明: このタイプの関係では、1つのモデルが他のモデルをいくつでも所有します。
1対多の関係の例:
hasMany('AppReview'); } }
1対多の関係(逆)の例:
belongsTo('AppTutorial'); } }
#3)多対多の関係
説明: これは、1対1および1対多の関係よりも複雑な関係であり、そのような関係を定義するには、ピボットテーブルを作成する必要があります。
多対多の関係の例:
belongsToMany('AppBook); } }
多対多(逆)の関係例:
belongsToMany('AppAuthor); } }
#4)持っている-ワンスルーの関係
説明: 単一の中間関係を介してモデルを接続します。
Has-one-through関係の例:
hasOneThrough('AppOwner', 'AppCar'); } }
#5)持っている-多くの-スルーの関係
説明: 簡単な方法で遠方または中間の関係にアクセスできます。
持っている-多くの-関係の例:
hasManyThrough('AppBook, 'AppAuthor); } }
#6)1対1(ポリモーフィック)関係
説明: これは1対1の関係に似ていますが、ターゲットモデルは、単一の関連付けで複数のモデルタイプに属することができます。
1対1(ポリモーフィック)関係の例:
morphTo(); } } class Article extends Model { /** * Get the article's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); } } class Author extends Model { /** * Get the author's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); }
#7)1対多(多態性)の関係
説明: これは1対多の関係に似ていますが、ターゲットモデルは単一の関連付けで複数のモデルタイプに属することができます。
1対多(ポリモーフィック)関係の例:
morphTo(); } } class Article extends Model { /** * Get all of the article's comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Audio extends Model { /** * Get all of the audio’s comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } }
#8)多対多(多形)関係
説明: このタイプの関係では、ターゲットモデルには、他のモデル間で共有できる一意のレコードがあります。
多対多(ポリモーフィック)関係の例:
morphToMany('AppComment, commentable); } }
Laravelの職人
前のチュートリアルで、私たちはそれを学びました 職人 は コマンドラインインターフェイス (( CLI )。
職人のコマンド
コマンドプロンプトで次のコマンドを実行して、使用可能なすべてのコマンドを表示します 職人の命令 。
php artisan
次のスクリーンショットは、上記のコマンドの出力を示しています。

次の表は、上記のコマンド(php artisan)の出力から取得した、いくつかの重要な職人コマンドとそれぞれの機能を示しています。
コマンド 機能性 cache:clear アプリケーションキャッシュをフラッシュする 助けて コマンドのヘルプを表示します リスト コマンドを一覧表示します 移行する データベースの移行を実行する テスト アプリケーションテストを実行する いじくり回す アプリケーションと対話する auth:clear-resets 期限切れのパスワードリセットトークンをフラッシュする db:seed データベースにレコードをシードする event:list アプリケーションのイベントとリスナーを一覧表示します key:generate アプリケーションキーを設定します make:channel 新しいチャネルクラスを作成する make:component 新しいビューコンポーネントクラスを作成する make:controller 新しいコントローラークラスを作成する make:event 新しいイベントクラスを作成する make:factory 新しいモデルファクトリを作成する make:listener 新しいイベントリスナークラスを作成する make:mail 新しいメールクラスを作成する make:ミドルウェア 新しいミドルウェアクラスを作成する make:migration 新しい移行ファイルを作成します make:model 新しいEloquentモデルクラスを作成します make:notification 新しい通知クラスを作成します make:observer 新しいオブザーバークラスを作成します make:policy 新しいポリシークラスを作成する make:provider 新しいサービスプロバイダークラスを作成する make:resource 新しいリソースを作成する make:seeder 新しいシーダークラスを作成する make:test 新しいテストクラスを作成する 移行:新鮮 すべてのテーブルを削除し、すべての移行を再実行します 移行:更新 すべての移行をリセットして再実行します 移行:リセット すべてのデータベース移行をロールバックする 移行:ロールバック 最後のデータベース移行をロールバックする 通知:テーブル 通知テーブルの移行を作成する route:list 登録済みのルートをすべて一覧表示 storage:link アプリケーション用に構成されたシンボリックリンクを作成します
Laravel Tinker
TinkerはREPL(READ-EVAL-PRINT-LOOP)であり、コマンドラインでアプリケーションを操作できます。 いじくり回す ルートを登録せずにデータベースと対話します。
Artisanでいじくり回すと、デフォルトで含まれます。
ティンカー環境の有効化
コマンドプロンプトで次のコマンドを実行して、Tinker環境を有効にします。
php artisan tinker
次のスクリーンショットは、上記のコマンドの出力を示しています。

Tinkerでデータを挿入
コマンドプロンプトで次のコマンドを実行して、新しいレコードをに挿入します。 ユーザー テーブル。
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
データベースには、次のスクリーンショットのような出力が表示されます。

Tinkerでデータを探す
コマンドプロンプトで次のコマンドを実行して、次のコマンドを使用しているレコードを検索/取得します。 id に等しい 二 の中に ユーザー テーブル。
$user = AppUser::find(2);
コマンドプロンプトには、次のスクリーンショットのような出力が表示されます。

Tinkerでデータを更新する
コマンドプロンプトで次のコマンドを実行して、 id に等しい 二 の中に ユーザー テーブル。
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
データベースには、次のスクリーンショットのような出力が表示されます。

Tinkerでデータを削除する
コマンドプロンプトで次のコマンドを実行して、 id に等しい 二 の中に ユーザー テーブル。
$user = AppUser::find(2); $user->delete();
データベースには、次のスクリーンショットのような出力が表示されます。

結論
Laravel Frameworkは、生のSQL、流暢なクエリビルダー、およびEloquentORMを使用してデータベースと対話します。モデルは、アプリケーションによって使用されるデータを処理します。雄弁な関係は、データベーステーブルを簡単にリンクするのに役立ちます。
移行は、データベーステーブルの作成に使用される特別な機能です。シードは、開発者が開発時にアプリケーションをテストするためのデータを必要とするため、開発者にとって非常に役立つテストデータをデータベースに挿入するために使用されます。 Tinkerは、ルートを登録せずにデータベースと対話します。
このチュートリアルがお役に立てば幸いです。次のチュートリアルでは、フォーム、ファイルのアップロード、認証、電子メールの送信、セッションなどについて説明します。
幸せな学習!
<< PREV Tutorial | 次のチュートリアル>>
推奨読書