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 共享主机

Laravel 5.2 如何将所有 404 错误重定向到主页

Laravel 5.8:如何将两个参数传递给 Event 和 Listener