猿问

在 LARAVEL 5.6 上命名 UNIQUE、INDEX、FOREING KEYS 的正确方法

我在 LARAVEL 上有这样的迁移代码:


public function up()

{

    Schema::create('estados', function (Blueprint $table) {

        $table->bigIncrements('id')->primary('PRIMARY');

        $table->string('nombre' , 30)->nullable();

        $table->unique('nombre' , 'nombre_u');

        $table->integer('pais_id')->default('1');

        $table->foreign('pais_id' , 'pais_id_fk')->refereces('id')->on('paises');

        $table->index('pais_id' , 'pais_id_fk_idx');

    });

}

我该如何改进我的代码?例如,我不知道如何将同一行中的接下来的两行设置为 UNIQUE:


$table->string('nombre' , 30)->nullable();

$table->unique('nombre' , 'nombre_u');

或者将这 3 行变成只有 1 行:


$table->integer('pais_id')->default('1');

$table->foreign('pais_id' , 'pais_id_fk')->refereces('id')->on('paises');

$table->index('pais_id' , 'pais_id_fk_idx');

你可以帮帮我吗?


提前致谢。


冉冉说
浏览 130回答 3
3回答

小怪兽爱吃肉

根据我的经验,这是最好的写法。如果您的其他表被命名,pais那么这将是最好的:public function up(){    Schema::create('estados', function (Blueprint $table) {        $table->id();        $table->string('nombre' , 30)->nullable()->unique();        $table->foreignId('pais_id')->constrained();    });}不然的话,这也不错……public function up(){    Schema::create('estados', function (Blueprint $table) {        $table->id();        $table->string('nombre' , 30)->nullable()->unique();        $table->unsignedBigInteger('pais_id')->default('1');        $table->foreign('pais_id')->refereces('id')->on('paises');    });}

幕布斯6054654

你可以做public function up(){    Schema::create('estados', function (Blueprint $table) {        $table->bigIncrements('id')->primary('PRIMARY');        $table->string('nombre' , 30)->unique()->nullable();        $table->integer('pais_id')->index()->default('1');        $table->foreign('pais_id')->references('id')->on('paises');    });}你不需要创建手动索引或外键,Laravel 会处理这些,除非你愿意。

达令说

不要忘记使用unsigned()在pais_idpublic function up(){    Schema::create('estados', function (Blueprint $table) {        $table->bigIncrements('id')->primary('PRIMARY');        $table->string('nombre' , 30)->unique()->nullable();        $table->integer('pais_id')->unsigned()->index()->default('1');    });        Schema::table('estados', function ($table) {      $table->foreign('pais_id')->references('id')->on('paises');    });}
随时随地看视频慕课网APP
我要回答