Laravel 5 - 如何为现有的外键添加->index()?

17

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

我有一个名为“pops”的表:

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

而表"conversions":

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

我已在"conversions"表中设置了一个外键(pop_id)。那么这是否意味着外键(pop_id)也是索引?如果不是......我需要做什么才能将其变成索引?

谢谢!


我对PHP了解不多,但是考虑到MySQL/SQL,即使添加了外键,你仍然需要显式地添加索引。 - nilesh
4个回答

26

你可以只是这样做。

<?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


5

这里有一个完美的解决方案。

向上

$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();

5

当我只写如下代码时,我遇到了问题:

$table->index('column_name');

要更准确地说,首先您需要创建所需列类型的列,然后将其分配为索引,如下所示:

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

希望这有所帮助。


4

Laravel只会添加外键约束,而不会隐式地添加索引。但是一些数据库,如MySQL,会自动为外键列创建索引。

如果您需要在另一个迁移中向字段添加索引,则可以执行以下操作:

$table->index('email');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接