Добавить активацию для каждого посеянного пользователя в Sentinel (Laravel)

Используя заполнение базы данных Laravel, я добавляю 10 случайных пользователей, когда я пытаюсь войти в систему с этими пользователями, Sentinel выдает мне ошибку, что учетная запись должна быть активирована в первую очередь, что я хочу сделать сейчас, это (когда я засею) сделайте активацию для каждого пользователя, который засеивается, вот мой DatabaseSeeder:

public function run()
{
    factory(App\User::class, 10)->create()->each(function($user) {
        DB::table('activations')->insert([
            'user_id' => $user->user_id,
            'code' => str_random(24),
            'completed' => '1'
        ]);
    });
}

Проблема, которую я получаю, заключается в том, что база данных заполняется случайными пользователями и 10 активациями, но все идентификаторы пользователей равны 0

Здесь пользовательская фабрика:

$factory->define(App\User::class, function (Faker $faker) {
    static $password;

    return [
        'id' => random_int(100000, 999999),
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
    ];
});

person sebas2201    schedule 21.02.2018    source источник
comment
является ли бот автоматически инкрементным столбцом id в таблице пользователей?   -  person Mahdi Younesi    schedule 21.02.2018
comment
Нет, извините, я не упомянул об этом, идентификаторы пользователей представляют собой случайные строки.   -  person sebas2201    schedule 21.02.2018
comment
сделать автоматически инкрементным   -  person Mahdi Younesi    schedule 21.02.2018
comment
Можете ли вы добавить пользовательский фабричный метод?   -  person Maraboc    schedule 21.02.2018
comment
Добавил @Marabo   -  person sebas2201    schedule 21.02.2018
comment
Просто добавьте столбец user_id в базу данных в качестве основного и автоматически увеличивающегося.   -  person DsRaj    schedule 21.02.2018
comment
вы получаете 0 как идентификатор в таблице пользователей или как user_id в рассказе об активациях?   -  person Maraboc    schedule 21.02.2018
comment
@Maraboc как идентификатор в таблице активаций   -  person sebas2201    schedule 21.02.2018
comment
извините, я не понял, это идентификатор или user_id в таблице активаций?   -  person Maraboc    schedule 21.02.2018
comment
Да, дело в том, что когда я создаю пользователя, пользователи получают идентификаторы от 100000 до 999999 (по объяснимым причинам), однако таблица активаций получает инкрементные идентификаторы (то есть от 1 до 10 в нашем случае), но поле user_id в таблице активаций выиграло не получить $user-›id пользователя, вместо этого он всегда возвращает 0.   -  person sebas2201    schedule 21.02.2018
comment
теперь понятно ;), у вас есть связь по пользовательской модели с активациями?   -  person Maraboc    schedule 21.02.2018
comment
Нет пока нет, возможно потому что Sentinel всегда автоматически делает активацию при регистрации пользователя   -  person sebas2201    schedule 21.02.2018


Ответы (1)


Добавьте фабрику для активаций:

$factory->define(App\Activation::class, function (Faker $faker) {
    return [
        'code' => str_random(24),
        'completed' => '1'
    ];
});

И добавьте отношение в модель пользователя:

public function activation()
{
    return $this->hasOne('App\Activation');
}

Тогда вы можете сделать так:

factory(App\User::class, 10)->create()->each(function($user) {
    $user->activation()->save(factory(App\Activation::class)->make());
});
person Maraboc    schedule 21.02.2018