5

Laravel アプリケーションをセットアップしており、ユーザー認証にSentry 2を使用しています。デフォルトの歩哨テーブルとPost一緒に呼び出されるモデルがあります。Userユーザーに多くの投稿を持たせ、投稿をユーザーに所属させたいと考えています。これをデータベース スキーマに反映するには、 と の間に外部キー制約を作成する必要がありpostsますusers

私が書いた移行は次のとおりです。

public function up()
{
    Schema::table('posts', function(Blueprint $table)
    {
        $table->integer('user_id')->after('id')->nullable();
        $table->foreign('user_id')->references('id')->on('users');
    });
}

で実行した後php artisan migrate、コマンド プロンプトに MySQL エラーが表示されます。

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1005 Can't create table 'blog.dev.#sql-3bb_2d' (errno: 150) (SQL: alter table postsadd constraint posts_user_id_foreign 外部キー ( user_id) 参照users( id)))

users最初は、主キー列が外部キー列とは異なるように定義されているため、このエラーが発生したと思っていましたが、user_id両方とも として定義されていint(10)ます。

Google から、このエラーは 2 つの列の定義が異なることが原因である可能性があることを知りましたが、ここではそうではないようです。

4

3 に答える 3

8

外部キーはすでにデータベースにあるはずなので、2 つの手順を実行することをお勧めします。user_idまた、列を無署名にすることをお勧めします。

public function up()
{
    Schema::table('posts', function(Blueprint $table)
    {
        $table->integer('user_id')->after('id')->nullable()->unsigned();
    });

    Schema::table('posts', function(Blueprint $table)
    {
        $table->foreign('user_id')->references('id')->on('users');
    });
}
于 2014-03-02T02:21:16.657 に答える
0

で解決しました

Schema::disableForeignKeyConstraints();

最初の移行前と

Schema::enableForeignKeyConstraints();

最後の移行で

スクリーンショット

于 2021-03-03T09:36:02.283 に答える