框架: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)也是一个索引?如果不是......我需要做什么才能使它成为一个指数?
感谢?
答案 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']);
});
}
}
答案 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();