表sites:
id|name |
--|-----------------|
1|https://test.ru/ |
2|https://loop.com/|
表counterparties:
id|client_id|
1| 1 |
2| 1 |
Pivot-таблица сounterparty_sites:
id|counterparty_id|site_id|
--|---------------|-------|
1| 1 | 1 |
迁移pivot-таблицы:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCounterpartySite extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('counterparty_site', function(Blueprint $table) {
$table->id();
$table->foreignId('counterparty_id')->constrained()->onDelete('cascade');
$table->foreignId('site_id')->constrained()->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('counterparty_sites');
}
}
尝试删除有或没有数据的表时,会导致错误:
SQLSTATE[2BP01]:从属对象仍然存在:7 错误:无法删除表站点,因为其他对象依赖于它详细信息:表上的约束对应方站点_站点_id_foreign 取决于表站点提示:使用 DROP ... CASCADE 也删除依赖对象。(SQL:如果存在“站点”,则删除表)
我知道级联不起作用,因为它不是删除记录,而是删除表(sites)。有没有办法解决这个问题,让 kakskad 工作?
有一个类似的问题。
这些行防止表被删除,因为其他人有指向它的链接。起初有必要删除链接,然后将可能的表。
级联是为了一些不同的东西。这是如果用户删除关联的记录,那么相关表中的记录也会被删除。
在Laravel Dropping Foreign Keys文档中阅读更多内容
该错误不在迁移或数据库限制中。中的表命名错误
down()。该表不应该被调用counterparty_sites,但是counterparty_site。和错误,在问题中已经是不删除表的结果。命名时要小心:)