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) {
//
});
}
}
コメント