簡體   English   中英

laravel 8 播種,SQLSTATE[23000]:違反完整性約束:

[英]laravel 8 seeding , SQLSTATE[23000]: Integrity constraint violation:

我已將我的項目從 Laravel 7 降級為 8 但問題是當我運行播種命令php artisan db:seed它顯示錯誤SQLSTATE[23000]: Integrity constraint violation: 這是因為它播種了我之前運行的先前播種數據。 在運行播種命令之前我也做過

  1. 在 DatabaseSeeder.php 和其他 Seeder 文件頂部添加 Database\Seeders 命名空間

  2. 將文件夾名稱種子替換為位於 \database\ 文件夾的播種機

  3. 更新 composer.json 如下:

     "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }

    },

  4. 最后,運行以下命令

    作曲家轉儲自動加載

    php 工匠數據庫:種子

我還更改了DatabaseSeeder命令$this->call(DeliveryAddressTableSeeder::class);

DeliveryAddressTableSeeder

    <?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\DeliveryAddress;

class DeliveryAddressTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        $deliveryRecords = [
            ['id' => 1, 'user_id' => 1, 'name' => '***', 'address' => 'Test 123', 'city' => '*******', 'country' => '******', 'pincode' => '*****', 'mobile' => '**********', 'status' => 1], 
        ];

        DeliveryAddress::insert($deliveryRecords);
    }
}

我希望 DeliveryAddress 遷移將具有 $table->id(); 的列宣言。 在這種情況下,您的播種機在多次運行時會在 id 列中插入重復值。

您可以在運行播種機之前截斷表格。

    <?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\DeliveryAddress;

class DeliveryAddressTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DeliveryAddress::truncate();
        //
        $deliveryRecords = [
            ['id' => 1, 'user_id' => 1, 'name' => '***', 'address' => 'Test 123', 'city' => '*******', 'country' => '******', 'pincode' => '*****', 'mobile' => '**********', 'status' => 1], 
        ];

        DeliveryAddress::insert($deliveryRecords);
    }
}

或者您可以跳過插入 id 列的值,因為它是自動遞增值。

 public function run()
  {
        
        $deliveryRecords = [
                ['user_id' => 1, 'name' => '***', 'address' => 'Test 123', 'city' => '*******', 'country' => '******', 'pincode' => '*****', 'mobile' => '**********', 'status' => 1], 
            ];
    
        DeliveryAddress::insert($deliveryRecords);
  }

此外,確認 user_id 列是否有任何外鍵約束。 如果是,您應該有一個用戶表的記錄,ID 為“1”,以避免任何不良數據。

        Eloquent::unguard();

        DB::statement('SET FOREIGN_KEY_CHECKS=0;');

        $this->call('YourTTableSeeder');

        DB::statement('SET FOREIGN_KEY_CHECKS=1;');

把這些扔進你的播種機

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM