【问题标题】:SQLSTATE[23000]: foreign keySQLSTATE[23000]:外键
【发布时间】:2020-06-10 18:31:35
【问题描述】:

您好,我仍然收到此错误,但一切看起来都很好,并且迁移工作正常。

SQLSTATE[23000]:违反完整性约束:1452 无法添加或 更新子行:外键约束失败 (fakturytable.fakturas, 约束 fakturas_id_sprzedawcy_foreign 外键 (id_sprzedawcy) 参考sprzedawcas (id) ON DELETE CASCADE) (SQL: insert into fakturas (typ_faktury, data_wystawienia, mejsce_wystawienia, data_sprzedazy, towar_usluga, jm, ilosc, cena_netto, watosc_netto, stawka_vat, kwota_vat, wartosc_brutto, status, sposob_platnosci, numer_konta, termin_platnosci) 值 (fsturaVAT,2020.10.14,明斯克 Mazowiecki,2020.10.26,porty,一月,10, 23456, 421124, 1234, 207, 1107, nieaplacona, qwrq, 12345678901234567890098321, 2020.10.28))

fakturas 迁移:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFakturasTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('fakturas', function(Blueprint $table){      
            $table->increments('id');
            $table->unsignedinteger('id_sprzedawcy');
            $table->unsignedinteger('id_nabywcy');
            $table->string('typ_faktury');
            $table->date('data_wystawienia');
            $table->string('mejsce_wystawienia');
            $table->date('data_sprzedazy');
            $table->string('towar_usluga');
            $table->string('jm');
            $table->bigInteger('ilosc');
            $table->bigInteger('cena_netto');
            $table->bigInteger('watosc_netto');
            $table->bigInteger('stawka_vat');
            $table->bigInteger('kwota_vat');
            $table->bigInteger('wartosc_brutto');
            $table->string('status');
            $table->string('sposob_platnosci');
            $table->string('numer_konta');
            $table->date('termin_platnosci');


        });
        Schema::table('fakturas',function($table){
            $table->foreign('id_sprzedawcy')
            ->references('id')->on('sprzedawcas')
            ->onDelete('cascade');
        $table->foreign('id_nabywcy')
            ->references('id')->on('nabywcas')
            ->onDelete('cascade');
        });

    }
    public function down()
    {

       Schema::dropIfExists('fakturas');
       Schema::enableForeignKeyConstraints();
    }
}

【问题讨论】:

  • 您好,您必须在父表 id 上放置相同的数据类型,例如 `$table->unsignedinteger('id_sprzedawcy');` 我认为这里是 `$table->unsignedBigInteger('id_sprzedawcy') ;`
  • 我在 nabywcas 表中使用 id 增量
  • 此表中id的数据类型是什么sprzedawcas
  • id 增量
  • 我是说您的id 属性在此表sprzedawcas 中的数据类型是什么,或者在您的问题中也发布您的此表。

标签: php laravel laravel-5.8


【解决方案1】:

您的插入不正确。

insert into fakturas (typ_faktury, data_wystawienia, mejsce_wystawienia, data_sprzedazy, towar_usluga, jm, ilosc, cena_netto, watosc_netto, stawka_vat, kwota_vat, wartosc_brutto, status, sposob_platnosci, numer_konta, termin_platnosci) values (fsturaVAT, 2020.10.14, Minsk Mazowiecki, 2020.10.26, porty, jan, 10, 23456, 421124, 1234, 207, 1107, nieaplacona, qwrq, 12345678901234567890098321, 2020.10.28))

不引用id_sprzedawcy,这是您在迁移中提出的要求。 (外键)。

您需要在插入时提供有效的id_sprzedawcy,或移除外键约束。

【讨论】:

  • 是的,但需要这个fogein键
  • 如果您需要它,您需要在插入中包含它的值。如果不提供外键值,则无法插入具有外键的行。
  • 无论您在哪里插入fakturas,您都需要使用表sprzedawcas 中的有效ID 添加id_sprzedawcy。我无法进一步解释。
【解决方案2】:

在插入 . 要么在创建语句中提供它,要么在迁移中使其为空:

$table->unsignedinteger('id_sprzedawcy')->nullable();

这同样适用于您拥有的任何其他外键。

【讨论】:

  • 是的,但我有自动增量
  • id_sprzedawcy 是与 sprzedawcas 中的 id 列分开的列,它只是引用它,但您必须为它提供一个值。此值来自 sprzedawcas 中的 id 列。 fakturas 表中的 id_sprzedawcy 列不是 sprzedawcas 表中的 id 列,它只是引用它,当您在 fakturas 的 id_sprzedawcy 列中插入值 1 时,它只是意味着:嘿,您正在寻找 sprzedawcy ,转到 sprzedawcas 表并查找具有 id 的行:1
  • 你能发布你的创建声明吗?
猜你喜欢
  • 2016-03-03
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2020-09-30
  • 1970-01-01
  • 2017-09-14
  • 2017-11-03
相关资源
最近更新 更多