[中学生でもわかるLaravel]カラム基礎記述<2025>



# 今回やること

* Laravelのカラム作成時に頻出する記述をまとめる

# 0.初めに
　データベース難しいのでまずはミクロの記述から学ぼうという試みです。
 マイグレーションやシード全体の事もいつか記事にしたい。

 よく使うもの、私が開発中にお世話になったものをまとめています。


💡筆者もまだ勉強中なので、内容は7割くらいの信頼度で読んでください。
また**コメント**していただけると、私の大きな学びになるので是非お願いします。

## 1.カラムのデータ型

```php:2024_05_04_093730_create_posts_table.php
//マイグレーション記述例
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->integer('id')//id
            $table->unsignedBigInteger('user_id'); //ユーザーid
            $table->string('post', 400);//投稿内容
            $table->timestamp('created_at')//作った時間
            $table->timestamp('updated_at')//最終編集した時間
        });
    }

```

| 分類       | メソッド記法                                | 説明                                                 |
|------------|---------------------------------------------|------------------------------------------------------|
| テキスト   | `string()`                                  | 文字列（255文字まで）                               |
| テキスト   | `text()`                                    | 長文テキスト（制限なし）                            |
| id        | `id()`                                      | `increments('id')` のエイリアス。主キー（自動増分） |
| id        | `bigIncrements()`                           | 大きな自動増分主キー。主に `id()` の代替            |
| 数        | `integer()`                                 | 整数（符号付き）                                     |
| 時間      | `timestamps()`                              | `created_at`・`updated_at` を自動で追加              |
| 時間      | `date()`                                    | 年月日（例: 2025-06-19）                             |
| 時間      | `dateTime()`                                | 年月日時分秒（例: 2025-06-19 14:00:00）              |
| リレーション | `foreignId('user_id')->constrained()`       | `users.id` に外部キー制約                            |
| リレーション | `unsignedBigInteger('user_id')`             | 外部キーの手動定義に使う（`bigIncrements`対応）     |
| リレーション | `foreignIdFor(User::class)`                 | モデルから自動で外部キーを生成（Laravel 7+）        |
| bool      | `boolean()`                                 | true / false フラグ                                  |
| その他    | `softDeletes()`                             | `deleted_at` カラムを追加                            |
| その他    | `json('options')`                           | JSON形式でデータ保存                                 |
| その他    | `rememberToken()`                           | Laravelログイン機能用のトークン                      |
| その他    | `enum('status', ['draft', 'published'])`    | 限定された値のセット                                 |


## 2.カラムの修飾子

```php:2024_05_04_093730_create_posts_table.php
//マイグレーション記述例
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->integer('id')->autoIncrement();//自動増分
            $table->unsignedBigInteger('user_id'); // user_idをunsignedBigIntegerに変更
            $table->string('post', 400);
            $table->timestamp('created_at')->useCurrent();//現在の時間に合わせる
            $table->timestamp('updated_at')->default(DB::raw('current_timestamp on update current_timestamp'));
            // 外部キー制約を追加
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

```

| 分類     | メソッド記法                     | 説明                                                    |
|----------|----------------------------------|---------------------------------------------------------|
| id       | `->unsigned()`                  | `id` などに負の値を許さないとき                        |
| id       | `->autoIncrement()`             | 自動増分（`integer` 型やカスタム主キーに使う）        |
| id       | `->primary()`                   | 主キーになるよう指定                                   |
| テキスト | `->default($value)`             | 初期値を指定したいとき                                 |
| 時間     | `->useCurrent()`                | `created_at` など日付系カラムの初期値を現在時刻に設定 |
| 時間     | `->useCurrentOnUpdate()`        | `updated_at` など更新時に現在時刻を自動設定            |
| その他   | `->comment('...')`              | カラムの説明を付けておきたいとき                       |
| その他   | `->nullable()`                  | 値の省略を許可したいとき（NULL可）                    |


# 終わりに

お疲れ様でした。

データベースってホントに難解ですよね。流れはつかめても記述が難しく、記述を追うと流れが見えづらくなる。整理して勉強していこうと思います。


もし誰かの役にたてたなら幸いです。
またコメント待っていますので、「みたよ」だけでもいいので是非よろしくお願いします。