LaravelはDBのテーブル定義の管理もプロジェクト上で行う。
テーブル定義を記述するファイルをマイグレーションファイル、定義をデータベースに反映する作業をマイグレートと呼ぶ
マイグレーションファイル作成
database/migrations/作成日時_create_messages_table.phpファイルができる
※間違えた場合は手動でファイルを削除し再度コマンドを実行する
#sail artisan make:migration ファイル名 --create=DBテーブル名
sail artisan make:migration create_messages_table --create=messages
database/migrations/作成日時_create_messages_table.php
を開いて
$table->string(‘body’);
を追加する
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('messages', function (Blueprint $table) {
$table->id();
$table->string('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('messages');
}
};
マイグレートを実行する
messagesテーブルにbodyという文字列のフィールドを追加する
マイグレート実行
sail artisan migrate
データベース操作
#データベース接続
sail mysql
#テーブル確認 FieldのとこにbodyがあればOK
desc messages;
#とりあえず登録
insert into messages(body) values('Hello Hello World!');
insert into messages(body) values('Hello Laravel');
モデルの作成
モデルはテーブルに情報を登録したり、情報を取得したりできるクラス
app/Models/Message.phpができる
#sail artisan make:model モデル名
sail artisan make:model Message
モデルはモデル名の複数形のテーブルと関連付けられる
今回はMessageモデルはmessagesテーブルと関連づけられる
Messageモデルを使用してmessagesテーブルを操作できる
コントローラ作成
app/Http/Controllers/MessageController.phpができる
sail artisan make:controller MessageController
コントローラー編集
indexメソッドはモデルを使用してメッセージテーブルのレコードを全件取得している。
取得した内容は連想配列でmessages/indexビューに渡している
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\View\View;
use App\Models\Message;
class MessageController extends Controller
{
public function index():View
{
// メッセージテーブルのレコードを全件取得
$messages = Message::all();
// messagesというキーで、ビューへ渡す
return view('message/index',['messages'=>$messages]);
}
}
ルーティング設定
ルーティングはroutes/web.phpに書く
/messagesにGETリクエストがきたらMessageControllerのindexメソッドが担当する
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\MessageController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('messages', [MessageController::class,'index']);
ルーティング状況は次のコマンドで確認
sail artisan route:list
ビューの作成
ビューファイルは手動で作成
resources/views/の配下にmessage/index.blade.phpを作成
BladeはLaravelが採用しているテンプレートエンジン
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Message Sample</title>
</head>
<body>
<main>
<h1>メッセージ</h1>
<ul>
@foreach ($messages as $message)
<li>{{ $message->body }}</li>
@endforeach
</ul>
</main>
</body>
</html>
http://localhost/messagesにアクセス
起動していない場合は
sail up -d
を実行