ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?