微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

laravel 8 播种,SQLSTATE[23000]:违反完整性约束:

如何解决laravel 8 播种,SQLSTATE[23000]:违反完整性约束:

我已经将我的项目从 Laravel 7 降级到 8。但问题是当我运行播种命令 PHP artisan db:seed 时,它显示一个错误 sqlSTATE[23000]: Integrity constraint conflict:。这是因为它播种了我之前运行的先前播种数据。 我在运行播种命令之前也做过

  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 artisan db:seed

我还更改了 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,];
    
        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;');

把这些扔进你的播种机

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。