Post モデル、マイグレーション、コントローラーファイルをまとめて作成します。マイグレーションとシーダーを実行して Post モデルとダミーデータを作成、保存していきます。
親記事
Dockerで環境構築して Laravel 9で CRUD 機能を作る
2022年03月15日
Laravel環境
- macOS
- Laravel v9.0.2
- Docker 20.10.12
準備
Post モデル、マイグレーション、コントローラーをまとめて作成します
php artisan make:model Post -m -c
//sail
sail artisan make:model Post -m -c
以下のファイルが生成されます。
- app/Models/Post.php
- database/migrations/2022_03_05_191054_create_posts_table.php
- app/Http/Controllers/PostController.php
マイグレーション
create_posts_tableファイルの up メソッドに、postsテーブル、id、タイトル、内容、ユーザーID、日付を保存できるように設定します。
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title', 100);
$table->text('content');
$table->foreignId('user_id')->constrained('users')->onDelete('cascade');
$table->timestamps();
});
}
7: usersテーブルの主キー idを参照するpostsテーブルの外部キー user_id 、作成したユーザーのアカウントが削除されると、紐付いたPostも削除するようにしています。
8: timestamps は作成日 created_at と更新日 updated_at が作成されます。
マイグレーションの実行
php artisan migrate
//sail
sail artisan migrate
シーディング
データベースができたので、database/seeders/DatabaseSeeder.php のrunメソッドに直接書いて、データの初期値を入れていきます。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use App\Models\Post;
use App\Models\User;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$faker = \Faker\Factory::create('ja_JP');
$admin = User::create([
'name' => 'admin',
'email' => 'user@user.com',
'password' => Hash::make('password')
]);
$user1 = User::create([
'name' => $faker->name(),
'email' => 'test@test.com',
'password' => Hash::make('password')
]);
for ($i = 0; $i < 10; $i++) {
Post::create([
'title' => $faker->text(40),
'content' => $faker->text(),
'user_id' => $user1->id
]);
}
}
}
20: ダミーテキストを使えるFakerを使用、Laravel Breeze で環境構築した場合デフォルトでインストールされています。
22-40: 一人のユーザーと、そのユーザーの10の投稿を作成しています。
シードを実行
php artisan db:seed
//sail
sail artisan db:seed
マイグレーションとシーディングを再構築
すべてのテーブルが削除され、すべての移行が再実行するコマンド
php artisan migrate:fresh --seed
//sail
sail artisan migrate:fresh --seed
次の記事
Laravel9 投稿 CRUD 機能を作成 〜 ルーティングを作成
2023年01月10日
Laravel