Php laravel种子唯一列忽略重复条目

Php laravel种子唯一列忽略重复条目,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在拉维尔有一台播种机 public function run() { $user = App\Admin::create([ 'first_name' => 'first', 'last_name' => 'last', 'phone' => '', 'email' => 'mail@gmail.com',

我在拉维尔有一台播种机

public function run()
    {
        $user = App\Admin::create([

            'first_name'     => 'first',
            'last_name'    => 'last',
            'phone'    => '',
            'email'    => 'mail@gmail.com',
        ]);
    }
在这封邮件中是独一无二的

php artisan db:seed
当我第一次运行时,它会将记录输入数据库,当我再次运行时,它会显示重复的条目

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'mail@gmail.com' for key 'email'

我可以选择忽略它吗?

您可以通过两种方式解决它:

1) 从数据库中的电子邮件列中删除唯一键约束(不推荐)


2) 使用faker library生成唯一的电子邮件地址-

您可以通过两种方法解决此问题:

1) 从数据库中的电子邮件列中删除唯一键约束(不推荐)


2) 使用faker library生成唯一的电子邮件地址-

在每次运行之前尝试刷新数据库。导入时使用:

使用Lightning\Foundation\Testing\RefreshDatabase

…并把它放在你班上的第一位:

使用数据库


(From:)

在每次运行之前尝试刷新数据库。导入时使用:

使用Lightning\Foundation\Testing\RefreshDatabase

…并把它放在你班上的第一位:

使用数据库


(From:)

填充数据库的简单方法是创建一个工厂,然后使用该工厂运行播种机

创建工厂,通常在data/Factorys目录中:

$factory->define(App\Admin::class, function (Faker\Generator $faker) {
    return [
        'first_name'    => $faker->firstName,
        'last_name'     => $faker->lastName,
        'phone'         => $faker->phoneNumber,
        'email'         => $faker->email
    ];
});
然后运行您的播种机:

factory(Admin::class, 20)->create();
本例将创建20个用户并存储它们


上面的示例使用Faker生成随机数据,

填充数据库的简单方法是创建一个工厂,然后使用该工厂运行seeder

创建工厂,通常在data/Factorys目录中:

$factory->define(App\Admin::class, function (Faker\Generator $faker) {
    return [
        'first_name'    => $faker->firstName,
        'last_name'     => $faker->lastName,
        'phone'         => $faker->phoneNumber,
        'email'         => $faker->email
    ];
});
然后运行您的播种机:

factory(Admin::class, 20)->create();
本例将创建20个用户并存储它们


上面的示例使用Faker生成随机数据,

我们可以选择检查表中是否存在给定的电子邮件

public function run(){
            $admin = DB::table('admins')->where('email', '=', 'mail@gmail.com')->first();

            if ($admin === null) {
                // user doesn't exist
                $user = App\Admin::create([

                    'first_name'     => 'Walter',
                    'last_name'    => 'Brown',
                    'phone'    => '',
                    'email'    => 'admin@gmail.com',
                    'password' => Hash::make('Admin123'),
                    'is_active'    => 1,
                    'remember_token' => str_random(10)
                ]);
             }
        }

我们可以选择检查表中是否存在给定的电子邮件

public function run(){
            $admin = DB::table('admins')->where('email', '=', 'mail@gmail.com')->first();

            if ($admin === null) {
                // user doesn't exist
                $user = App\Admin::create([

                    'first_name'     => 'Walter',
                    'last_name'    => 'Brown',
                    'phone'    => '',
                    'email'    => 'admin@gmail.com',
                    'password' => Hash::make('Admin123'),
                    'is_active'    => 1,
                    'remember_token' => str_random(10)
                ]);
             }
        }

您可以在模型上使用
firstOrCreate()
方法,如下所示:

public function run()
{
    App\Admin::firstOrCreate([

        'first_name'     => 'first',
        'last_name'    => 'last',
        'phone'    => '',
        'email'    => 'mail@gmail.com',
    ]);
}
如果要插入多条记录,可以在
run()
函数中执行以下操作:

$records = [
    [
        'first_name'     => 'first',
        'last_name'    => 'last',
        'phone'    => '',
        'email'    => 'mail@gmail.com',
    ],
    [
        'first_name'     => 'first2',
        'last_name'    => 'last2',
        'phone'    => '',
        'email'    => 'mail2@gmail.com',
    ]
];

foreach($records as $record) {
    App\Admin::firstOrCreate($record);
}

我在我的播种器中使用这个技巧,只要我想确保没有重复的值插入到DB中。
firstOrCreate()
方法在创建记录之前检查该记录是否在数据库中。

您可以在模型上使用
firstOrCreate()
方法,如下所示:

public function run()
{
    App\Admin::firstOrCreate([

        'first_name'     => 'first',
        'last_name'    => 'last',
        'phone'    => '',
        'email'    => 'mail@gmail.com',
    ]);
}
如果要插入多条记录,可以在
run()
函数中执行以下操作:

$records = [
    [
        'first_name'     => 'first',
        'last_name'    => 'last',
        'phone'    => '',
        'email'    => 'mail@gmail.com',
    ],
    [
        'first_name'     => 'first2',
        'last_name'    => 'last2',
        'phone'    => '',
        'email'    => 'mail2@gmail.com',
    ]
];

foreach($records as $record) {
    App\Admin::firstOrCreate($record);
}

我在我的播种器中使用这个技巧,只要我想确保没有重复的值插入到DB中。
firstOrCreate()
方法在创建记录之前检查该记录是否在数据库中,如果不在数据库中。

您可能必须从数据库的电子邮件列中删除唯一键约束,您可以添加表
admins
的迁移代码吗?要求是
电子邮件应该是唯一的。
我要找的是覆盖或忽略。这是可能的。?您可能必须从数据库的电子邮件列中删除唯一键约束,是否可以添加表
管理员的迁移代码
?要求
电子邮件应该是唯一的。
我要找的是覆盖或忽略。可能吗?facker是否会覆盖电子邮件或忽略电子邮件(如果已经存在)。?不,我在生产过程中遇到这个错误,我不想在那里插入假电子邮件,我正在寻找一个可以忽略电子邮件或覆盖电子邮件的解决方案。@Sethu还说facker的唯一生成器是(伪)随机的,他们有可能产生两次相同的值,尽管可能性不大。facker是否会覆盖电子邮件或忽略电子邮件(如果已经存在)。?不,我在生产过程中遇到了这个错误,我不想在那里插入假电子邮件,我正在寻找一种忽略电子邮件或覆盖电子邮件的解决方案。@Sethu还伪造了唯一的生成器(伪)随机的,他们有可能产生两次相同的值,虽然可能性不大。RefreshDatabase将删除所有条目。如果是这样,我们会丢失大量数据。我只希望种子播撒者忽略相同的记录是否已经存在。抱歉,没有意识到您正在播种一个填充了重要管理数据的表-很感兴趣在这种情况下,我同意所有建议伪造唯一地址的人,或者完全删除唯一约束的人。刷新数据库将删除所有条目。如果是这样的话,我们会丢失大量数据。我只希望种子播撒者忽略相同的记录。抱歉,没有意识到你是种子播撒者使用重要的管理数据填充一个表-这是一个有趣的情况。在这种情况下,我同意所有建议伪造唯一地址的人,或者完全删除唯一约束的人。如果你想提供一个可能的值数组(因为你需要它们,就像你的应用程序中的其他地方一样)还需要强制它们是唯一的吗?如果你想提供一系列可能的值(因为你需要它们,就像它们存在于你的应用程序中的其他地方一样),并且还需要强制它们是唯一的呢?