laravel 5 - 我如何将 ->index() 添加到现有的外键
Posted
技术标签:
【中文标题】laravel 5 - 我如何将 ->index() 添加到现有的外键【英文标题】:laravel 5 - How can i add ->index() to existing foreign key 【发布时间】:2017-05-28 11:09:58 【问题描述】:框架: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();
);
还有表格“转化”:
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();
);
我在“转换”表中设置了一个外键 (pop_id)。现在这是否意味着外键(pop_id)也是一个索引?如果不是...我需要做什么才能使其成为索引?
谢谢?
【问题讨论】:
我对 PHP 了解不多,但考虑到 MySQL/SQL,即使添加了外键,您也需要显式添加索引 【参考方案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】:我刚写的时候遇到了问题:-
$table->index('column_name');
所以更准确地说,首先您需要创建具有所需列类型的列,然后将其分配为 index,如下所示:-
$table->string('column_name');
$table->index('column_name');
//or
$table->string('column_name')->index();
希望对你有帮助
【讨论】:
【参考方案3】:这里有一个完美的解决方案。
向上
$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();
【讨论】:
【参考方案4】:Laravel 只添加外键约束,并没有隐式添加索引。但有些数据库如 MySQL 会自动索引外键列。
如果您需要在另一个迁移中为某个字段添加索引。那你就可以了
$table->index('email');
【讨论】:
以上是关于laravel 5 - 我如何将 ->index() 添加到现有的外键的主要内容,如果未能解决你的问题,请参考以下文章
如何将我的 laravel 5.0 项目直接升级到 5.4?
如何使用中间件来授权我的 laravel Restful API
如何将 Laravel 5.4 与 Angular 4 集成
如何将 Laravel 5.5 应用部署到 Godaddy cPanel 共享主机