ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
カラム追加
既存テーブルにカラムを追加するマイグレーション:
php artisan make:migration add_phone_to_users_table --table=userspublic function up() {
Schema::table('users', function (Blueprint $table) {
// 基本: nullable で追加(既存行があれば NULL になる)
$table->string('phone', 20)->nullable()->after('email');
// デフォルト値付き
$table->string('status', 20)->default('active')->after('phone');
// 複数カラムまとめて追加
$table->date('birth_date')->nullable();
$table->json('preferences')->nullable();
$table->timestamp('last_login_at')->nullable();
});
}
public function down() {
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['phone', 'status', 'birth_date', 'preferences', 'last_login_at']);
});
}
カラム変更
doctrine/dbal パッケージが必須:
composer require doctrine/dbal
php artisan make:migration change_users_tablepublic function up() {
Schema::table('users', function (Blueprint $table) {
// 型と長さの変更
$table->string('name', 100)->change();
// NULL 許可に変更
$table->string('phone', 20)->nullable()->change();
// デフォルト値を変更
$table->string('status', 20)->default('inactive')->change();
// カラム名変更(doctrine/dbal 必須)
$table->renameColumn('phone', 'phone_number');
});
}
public function down() {
// 必ず逆操作を書く
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
$table->string('phone', 20)->nullable(false)->change();
$table->string('status', 20)->default('active')->change();
$table->renameColumn('phone_number', 'phone');
});
}
カラム削除
public function up() {
Schema::table('users', function (Blueprint $table) {
// 単一カラム
$table->dropColumn('temporary_field');
// 複数カラム
$table->dropColumn(['old_field1', 'old_field2', 'old_field3']);
});
}
public function down() {
// 削除前の状態を復元するため、追加 SQL を書く
Schema::table('users', function (Blueprint $table) {
$table->string('temporary_field', 100)->nullable();
$table->string('old_field1')->nullable();
$table->string('old_field2')->nullable();
$table->string('old_field3')->nullable();
});
}
位置指定(MySQL のみ)
| メソッド | 動作 |
|---|---|
->after('column') | 指定カラムの後ろに追加 |
->first() | テーブル先頭に追加 |
| 指定なし | 最後に追加(デフォルト) |
PostgreSQL / SQLite はカラム位置を持たないため、after() は MySQL のみ機能します。
主要なカラム型
| メソッド | SQL | 用途 |
|---|---|---|
$table->id() | BIGINT UNSIGNED AUTO_INCREMENT | 主キー |
$table->string('name', 100) | VARCHAR(100) | 短文 |
$table->text('body') | TEXT | 長文 |
$table->integer('age') | INT | 整数 |
$table->bigInteger('user_id') | BIGINT | 大きい整数 |
$table->decimal('price', 10, 2) | DECIMAL(10,2) | 金額 |
$table->boolean('active') | TINYINT(1) | 真偽値 |
$table->date('birth_date') | DATE | 日付 |
$table->datetime('event_at') | DATETIME | 日時 |
$table->timestamp('created_at') | TIMESTAMP | タイムスタンプ |
$table->json('options') | JSON | JSON データ |
$table->enum('status', ['a','b']) | ENUM | 列挙 |
$table->uuid('id') | CHAR(36) | UUID |
$table->foreignId('user_id') | BIGINT UNSIGNED + FK | 外部キー |
修飾子
| メソッド | 意味 |
|---|---|
->nullable() | NULL 許可 |
->default($value) | デフォルト値 |
->useCurrent() | デフォルトを CURRENT_TIMESTAMP に |
->unique() | UNIQUE 制約 |
->index() | インデックス作成 |
->unsigned() | 符号なし(数値型) |
->comment('説明') | カラムコメント |
->charset('utf8mb4') | 文字セット |
->collation('utf8mb4_unicode_ci') | 照合順序 |
マイグレーション実行
# 未実行のマイグレーションを順次実行
php artisan migrate
# 直近のマイグレーションを 1 つ戻す
php artisan migrate:rollback
# 直近 N 個戻す
php artisan migrate:rollback --step=3
# 全部リセット + 再実行(開発時のみ)
php artisan migrate:refresh
# 全部 drop して migration 再実行 + seeder
php artisan migrate:fresh --seed
# 状態確認
php artisan migrate:status
本番運用の注意
- 大テーブルの ALTER は時間がかかる: 数百万行を超えると数十分ロックされる可能性。pt-online-schema-change などを検討
- 1 マイグレーション = 1 変更に分けるとロールバックが楽
- down() を必ず書く: 本番でロールバックできるように
- カラム削除は段階的に: ① コード側で参照削除 → ② 本番反映 → ③ カラム削除マイグレーション、の 2 段階
- カラム名変更: アプリのデプロイ順を考慮(先に古い名前を参照しないようコード変更してから rename)
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- テーブルの作成と定義の変更
- カラムの追加、変更、削除方法
- データ型とカラム修飾子
- デフォルト値の設定
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?