Kentavr16
@Kentavr16
long cold winter

Как создать фабрики для связанных таблиц?

есть две простые таблицы
Schema::create('profils', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
            $table->string("name");
            $table->string("surname");
            $table->string("email");
            $table->integer("user_id");
        });

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
            $table->string("login");
            $table->string("password");
        });

class User extends Model
{
    use HasFactory;
    public function profil()
    {
        return $this->hasOne(Profil::class);
    }
}

Подскажите как создать фабрику для профиля? Меня устроит если значение user_id будет автоинкрементным. Но в таком случае при попытке запуска сидера возникает ошибка, говорящая что два первичных ключа не может быть в таблице. Порыл немного документацию - там автоинкремент всегда с первичным ключем.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
class ProfilFactory extends Factory
{
    public function definition(): array
    {
        return [
            'user_id' => User::factory(),
            // ...
        ];
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kentavr16
@Kentavr16 Автор вопроса
long cold winter
Разобрался. нужно просто создавать нового пользователя во время создания профилей, динамически подставляя айди нового пользователя
public function definition(): array
    {
        return [
            "name"=>fake()->word(),
            "surname"=>fake()->word(),
            "email"=>fake()->word(),
            "user_id"=>function(){
            return User::factory()->create();
            }
        ];
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы