Как использовать идентификатор модели при изготовлении фабрики той же модели? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь получить идентификатор пользователя на фабрике, чтобы я мог сохранить его хешированную версию:

$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'hashed_id' => Hashids::encode($this->id),
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
});

$this->id в 'hashed_id' => Hashids::encode($this->id) подразумевает ссылку на User::class

Ошибка

ErrorException: неопределенное свойство: Illuminate \ Database \ Eloquent \ Factory :: $ id

1 Ответ

0 голосов
/ 05 февраля 2020

Вы должны назначить наблюдателя, который будет следить за каждым созданием записи базы данных.

Это позволит вам прокси-сервер для создания и изменения данных.

См .: https://laravel.com/docs/5.8/eloquent#observers

Или вы можете напрямую добавить привязку к событиям модели на модели.

protected static function boot()
{
    parent::boot();

    static::creating(function ($user) {
        $user->hashed_id = Hashids::encode($user->id);
    });
}
...