Laravel ::更新外键的最佳方式

时间:2016-07-18 02:06:16

标签: php database laravel laravel-5.1

我有这个迁移文件

Schema::create('table_one', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->string('name'); 
    $table->integer('table_two_id')->unsigned(); 
    $table->foreign('table_two_id')->references('id')->on('table_two'); 
    $table->timestamps(); 
});

我想更新以使其 - > onDelete('cascade');

$table->foreign('table_two_id')->references('id')->on('table_two')->onDelete('cascade');

这样做的最佳方式是什么?

是否有类似 - > change();

的内容

由于

5 个答案:

答案 0 :(得分:22)

删除外键,然后重新添加,然后运行迁移。

public function up()
{
    Schema::table('table_one', function (Blueprint $table) {
        $table->dropForeign(['table_two_id']);

        $table->foreign('table_two_id')
            ->references('id')
            ->on('table_two')
            ->onDelete('cascade');
    });
}

答案 1 :(得分:2)

您需要删除

     public function up()
    {
        Schema::table('<tableName>', function (Blueprint $table) {
            $table->dropForeign('<FK-name>');
            $table->dropColumn('<FK-columnName>');
        });
        Schema::table('<tableName>', function (Blueprint $table) {
            $table->foreignId('<FK-columnName>')->constrained()->cascadeOnDelete();
        });

    }

有两个查询。在 Laravel 8 上工作

答案 2 :(得分:1)

  1. composer require doctrine/dbal
  2. 在您的迁移文件中,执行以下操作:
    Schema::table('table_one', function (Blueprint $table) {
        $table->foreignId('table_two_id')
              ->change()
              ->constrained('table_two')
              ->onDelete('cascade');
    });
  1. php artisan migrate

答案 3 :(得分:0)

Christopher K.是对的,在Laravel文档中说:

要删除外键,可以使用dropForeign方法。外键约束使用与索引相同的命名约定。因此,我们将连接表名和约束中的列,然后在名称后加上“ _foreign”

$table->dropForeign('posts_user_id_foreign'); 

或者,您可以传递一个 array 值,该值将在删除时自动使用常规约束名称:

$table->dropForeign(['user_id']);

https://laravel.com/docs/5.7/migrations#foreign-key-constraints

答案 4 :(得分:-1)

如何通过控制器进行操作

1-设置任务:
     路线:: get('foreignkeyforimg',“ foreignkey @ index”);  2-用外键名称创建控制器。
 3-带有Migration类扩展名的Foreignkey控制器。
4-转到数据库并从表中手动删除旧的主键

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class Foreignkey extends Migration
{
    function index(){

        Schema::table('images', function (Blueprint $table) {


            $table->foreign('sub_cat_id')
               ->references('id')
                ->on('subcategories')
                ->onDelete('cascade');
        });
    }
}