Laravelで複合主キーのテーブルを作成する

laravel

Laravelで複合主キーのテーブルを作成する

複合主キーを定義する

そのまま複合主キーを書くと以下のようにエラーになります。

class MakeDataTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('data', function (Blueprint $table) {
            $table->datetime("time")->primary();
            $table->char("ticker", 6)->primary();
            $table->float("open");
            $table->float("high");
            $table->float("low");
            $table->float("close");
        });
    }
}
php artisan migrate
# >>>  SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary key defined (SQL: alter table `data` add primary key `data_ticker_primary`(`ticker`))

対応: $table->primary()を用いる

各カラムにprimaryをつけるのをやめ、$table->primaryで一括で宣言するよう変更します。

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class MakeDataTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('data', function (Blueprint $table) {
            $table->datetime("time");
            $table->char("ticker", 6);
            $table->float("open");
            $table->float("high");
            $table->float("low");
            $table->float("close");

            $table->primary(["time", "ticker"]);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('data', function (Blueprint $table) {
            //
        });
    }
}

コメント

タイトルとURLをコピーしました