Laravel :: 更新外键的最佳方式
Laravel :: Best way to update a foreign key
我有这个迁移文件
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();
谢谢
删除外键然后再次添加并运行 迁移。
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');
});
}
Christopher K. 是对的,在 Laravel 文档中说:
要删除外键,您可以使用 dropForeign 方法。外键约束使用与索引相同的命名约定。因此,我们将连接 table 名称和约束中的列,然后在名称后缀“_foreign”:
$table->dropForeign('posts_user_id_foreign');
或者,您可以传递一个 array 值,它会在删除时自动使用常规约束名称:
$table->dropForeign(['user_id']);
https://laravel.com/docs/5.7/migrations#foreign-key-constraints
如何通过控制器
1- 设定一个规则:
Route::get('foreignkeyforimg', "foreignkey@index");
2- 使用外键名称创建控制器。
3- 从迁移 class.
扩展的外键控制器
4- 转到数据库并从 table
中手动删除旧的主键
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');
});
}
}
composer require doctrine/dbal
- 在您的迁移文件中,执行以下操作:
Schema::table('table_one', function (Blueprint $table) {
$table->foreignId('table_two_id')
->change()
->constrained('table_two')
->onDelete('cascade');
});
php artisan migrate
您需要删除
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
我有这个迁移文件
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();
谢谢
删除外键然后再次添加并运行 迁移。
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');
});
}
Christopher K. 是对的,在 Laravel 文档中说:
要删除外键,您可以使用 dropForeign 方法。外键约束使用与索引相同的命名约定。因此,我们将连接 table 名称和约束中的列,然后在名称后缀“_foreign”:
$table->dropForeign('posts_user_id_foreign');
或者,您可以传递一个 array 值,它会在删除时自动使用常规约束名称:
$table->dropForeign(['user_id']);
https://laravel.com/docs/5.7/migrations#foreign-key-constraints
如何通过控制器
1- 设定一个规则:
Route::get('foreignkeyforimg', "foreignkey@index");
2- 使用外键名称创建控制器。
3- 从迁移 class.
扩展的外键控制器
4- 转到数据库并从 table
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');
});
}
}
composer require doctrine/dbal
- 在您的迁移文件中,执行以下操作:
Schema::table('table_one', function (Blueprint $table) {
$table->foreignId('table_two_id')
->change()
->constrained('table_two')
->onDelete('cascade');
});
php artisan migrate
您需要删除
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