Php laravel 8种子设定,SQLSTATE[23000]:完整性约束冲突:

Php laravel 8种子设定,SQLSTATE[23000]:完整性约束冲突:,php,laravel,laravel-blade,laravel-seeding,Php,Laravel,Laravel Blade,Laravel Seeding,我将我的项目从Laravel7降到了8。但问题是,当我运行seeding命令时,它显示了一个错误SQLSTATE[23000]:完整性约束冲突:。这是因为它为我之前运行的前一个种子设定数据进行了种子设定。 我在运行种子设定命令之前也做过 在DatabaseSeeder.php和其他种子文件的顶部添加Database\Seeder命名空间 将文件夹名称种子替换为位于\database\folder的种子 更新composer.json,如下所示: "autoload": {

我将我的项目从Laravel7降到了8。但问题是,当我运行seeding命令时,它显示了一个错误SQLSTATE[23000]:完整性约束冲突:。这是因为它为我之前运行的前一个种子设定数据进行了种子设定。 我在运行种子设定命令之前也做过

  • 在DatabaseSeeder.php和其他种子文件的顶部添加Database\Seeder命名空间

  • 将文件夹名称种子替换为位于\database\folder的种子

  • 更新composer.json,如下所示:

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

  • 最后,运行以下命令

    作曲家转储自动加载

    php artisan数据库:种子

  • 我还更改了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);
        }
    }
    

    另外,确认user_id列是否具有任何foreignkey约束。如果是,您应该有一个id为“1”的users表记录,以避免任何错误数据。

    您可以显示DeliveryAddressTableSeeder播种器吗?那个表格里有什么数据吗?@Psycho请结帐。我已经更新了这个问题,如果我正确理解种子设定,您只需要在所有表创建时运行一次,一旦数据库被种子设定,您就不需要再次运行它,除非您刷新数据库。@MuqadarAli,您不想在种子设定之前先截断表吗?您的送达地址的id设置为1。我猜这个ID在您的表中设置为增量。我认为您应该截断您的表,或者从播种机中删除“id”字段。@Muqadar根据您的播种机,jasvinder的回答应该足够了
        <?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);
        }
    }
    
     public function run()
      {
            
            $deliveryRecords = [
                    ['user_id' => 1, 'name' => '***', 'address' => 'Test 123', 'city' => '*******', 'country' => '******', 'pincode' => '*****', 'mobile' => '**********', 'status' => 1], 
                ];
        
            DeliveryAddress::insert($deliveryRecords);
      }