我在Laravel 5.1中使用数据库迁移和播种。
移民
public function up()
{
Schema::create('teachers', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->integer('teacher_id')->unsigned();
$table->boolean('disable')->default(0);
$table->timestamps();
$table->unique(['user_id', 'teacher_id']);
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('teacher_id')->references('id')->on('users')->onDelete('cascade');
});
}
字符串
- user_id和teacher_id必须是唯一的。
样板工厂
$factory->define(App\Teacher::class, function ($faker) {
return [
'user_id' => $faker->numberBetween(1, 59),
'teacher_id' => $faker->numberBetween(1, 59),
];
});
型
我在DatabaseSeeder.php
中设置了用于生成500个教师关系的seeder:factory(App\Teacher::class, 500)->create();
但我得到了这个错误:
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10-11' for key 'teachers_user_id_teacher_id_
unique'
型
正如你所看到的,*(唯一属性)导致了这个错误。有什么方法可以修复它吗?你的想法是什么?
3条答案
按热度按时间nbnkbykc1#
你可以得到一个
User
模型的集合,然后在一个while
循环中从该集合中的随机ID分配对:字符串
yvt65v4c2#
如果数据库中存在唯一的记录,你可以抛出异常。然后在seeder类中,使用try-catch块,捕获异常不做任何事情。如果遇到现有的记录,播种应该继续。
例如:假设
product_stocks
表中有3列,其中product_id
,color_id
和size_id
是唯一的。工厂类:
字符串
播种机等级:
型
gajydyqb3#
字符串