Php 如何使用两个外键在Laravel 8中生成正确的伪数据?

Php 如何使用两个外键在Laravel 8中生成正确的伪数据?,php,laravel,Php,Laravel,我有这些桌子: Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name', 100); // ..... }); Schema::create('users_booking', function (Blueprint $table) { $table->unsignedB

我有这些桌子:

    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name', 100);
       // .....
    });

    Schema::create('users_booking', function (Blueprint $table) {
        $table->unsignedBigInteger('user_id');
        $table->unsignedBigInteger('user_id_booking');
        $table->dateTime('created_at')->useCurrent();

        $table->primary(['user_id', 'user_id_booking']);
        $table->foreign('user_id')->references('id')->on('users');
        $table->foreign('user_id_booking')->references('id')->on('users');
    });
这是我的工厂:

public function definition()
{
    $userId = 1;
    $userIdBooking = 1;

    while ($userId === $userIdBooking) {
        $userId = User::all()->random()->id;
        $userIdBooking = User::all()->random()->id;
    }

    return [
        'user_id' => $userId,
        'user_id_booking' => $userIdBooking,
        'created_at' => $this->faker->dateTimeInInterval('-90 days', '+ 90 days')
    ];
}




  User::factory(500)->create();
  UserBooking::factory(100)->create();
我正试图这样做,但有时主键会出错

SQLSTATE[23000]:完整性约束冲突:1062重复条目“95-131”,用于密钥“users\u booking.PRIMARY”


如何解决此问题?

基于
UserBooking
主键约束,您需要验证
User::all()->random()->id与已插入
UserBooking
表中的先前ID不冲突<代码>while($userId===$userIdBooling | | UserBooking::where('user_id',$userId)->where('user_id_booking',$user_id_booking)->count()>0)
@WillB。它不起作用:(不同的错误消息还是相同的错误消息?是否一次创建多个记录(批量插入)?由于,我建议重构为单个列主键,对
user\u id
user\u id\u booking
列进行唯一约束,以减少可能遇到的潜在问题。