1

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),
    ];
});

500 のティーチャー リレーショナルを生成するためのシーダーをセットアップしましたDatabaseSeeder.phpfactory(App\Teacher::class, 500)->create();

しかし、私はこのエラーが発生しました:

[PDOException] 
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10-11' for key 'teachers_user_id_teacher_id_ 
unique'

ご覧のとおり、*** (一意のプロパティ) が原因でエラーが発生しました。それを修正する方法はありますか?あなたの考えは?

4

3 に答える 3

1

Userモデルのコレクションを取得し、whileループでそのコレクション内のランダム ID からペアを割り当てることができます。

$users = User::all(['id']);

while ($users->count() > 1) {
    // Get random user for a teacher, and remove from collection
    $teacher = $users->random();
    $users->pull($teacher->getKey());

    // Get random user and remove from collection
    $user = $users->random();
    $users->pull($user->getKey());

    Teacher::create([
        'user_id' => $user->getKey(),
        'teacher_id' => $teacher->getKey(),
    ]);
}
于 2016-02-22T12:00:54.767 に答える