ひらい ぶらり Hi-Library

ぷろぐらみんぐについて。ときどきどうでもいいことについて。

Laravel4で複合プライマリーキーを設定する

Laravel4のSchemeBuilderを使って複合プライマリーキーを設定したかったけどダメだった。 パーティションを切りたかったので、パーティションのキーになる日時も合わせて複合主キーにしたかったけど、incrementsメソッドにはもれなくprimaryがついちゃうらしく

<?php
// こうとか
Schema::create("log", function($table) {
                $table->increments('id');
                $table->timestamps();
                $table->primary(['id', 'created_at']);
            });
// こうとか
 Schema::create("log", function($table) {
                $table->increments('id');
                $table->timestamps();
                $table->primary('created_at');
            });

こんなかんじにやってもエラーがでます。idからdropPrimaryをしてみてもエラーになる。 どないせいっちゅうねん

結論:使わない

本末転倒な気もするけど、とりあえずmigrationの最初に設定できればいいので、以下みたいにすれば問題ない(ある)

<?php
Schema::create("log", function($table) {
                $table->increments('id');
                $table->timestamps();
            });

DB::statement("
    ALTER TABLE `log`
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (`id`, `created_at`);
    ");

わーい\\٩( 'ω' )و ///できたぞー(当たり前) incrementsとprimaryは別々にしてほしい(小並感)