laravel 5 - 如何向现有外键添加 - > index()

时间:2017-05-28 11:09:59

标签: php mysql sql laravel laravel-5

框架:Laravel 5.2 数据库:MySQL PHP:7.0

我有“poptins”表:

    Schema::create('poptins', function (Blueprint $table) {
        $table->string('id')->primary()->index();
        $table->string('ab_test_parent_id')->nullable();
        $table->string('cloned_parent_id')->nullable();
        $table->timestamps();
    });

表格“转换”:

    Schema::create('conversions', function (Blueprint $table) {
        $table->string('id')->primary()->index();
        $table->integer('users')->default(null);
        $table->string('name',256)->default(null);
        $table->string('poptin_id');
        $table->foreign('poptin_id')->references('id')->on('poptins')->onDelete('cascade')->onUpdate('cascade');
        $table->timestamps();
    });

我在“转换”表中设置了一个外键(poptin_id)。现在是否意味着外键(poptin_id)也是一个索引?如果不是......我需要做什么才能使它成为一个指数?

感谢?

4 个答案:

答案 0 :(得分:2)

Laravel只添加外键约束,并且不会隐式添加索引。但是某些数据库(如MySQL)会自动索引外键列。

如果需要在另一次迁移中向字段添加索引。然后你可以做

$table->index('email');

答案 1 :(得分:1)

您可以执行此操作。

<?php

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

class AddIndexToLeads extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('leads', function(Blueprint $table)
        {
            $table->index('trader_id');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('leads', function (Blueprint $table)
        {
            $table->dropIndex(['trader_id']);
        });
    }

}

贷记@bobbybouwmann

答案 2 :(得分:0)

我刚写:-

时遇到了问题
$table->index('column_name');

因此,更确切地说,您首先需要创建具有所需列类型的列,然后将其分配为 index ,如下所示:-

  $table->string('column_name');
  $table->index('column_name');
  //or
  $table->string('column_name')->index();

我希望这对您有帮助

答案 3 :(得分:0)

这是您的理想解决方案。

$table->string('poptin_id')->index('poptin_id');

$table->dropIndex(['poptin_id']);

建议修复您的迁移

$table->string('id')->primary()->index();

在上方替换为下方

$table->increments('id');

并按如下所示修复外键

$table->integer('poptin_id')->index('poptin_id')->unsigned();