当用户在我的站点上注册时,我想向另一个表(位置)添加一个记录。
我已经把它和社交网站上的谷歌注册联系在一起了:
// if user already found
if( $user ) {
// update the avatar and provider that might have changed
$user->update([
'avatar' => $providerUser->avatar,
'provider' => $driver,
'provider_id' => $providerUser->id,
'access_token' => $providerUser->token
]);
} else {
// create a new user
$user = User::create([
'name' => $providerUser->getName(),
'email' => $providerUser->getEmail(),
'avatar' => $providerUser->getAvatar(),
'provider' => $driver,
'provider_id' => $providerUser->getId(),
'access_token' => $providerUser->token,
// user can use reset password to create a password
'password' => ''
]);
}
### this is the bit I added ###
DB::table('locations')->insert([
'name'=>'Practice location',
'created_at'=> date('Y-m-d H:j:s'),
'updated_at'=> date('Y-m-d H:j:s'),
'user'=> $user->id,
'url'=> 'https://sites-jk.s3.eu-west-2.amazonaws.com/seeder/dartboard.png',
]);最后一个代码块在locations表中添加了与新用户相关的记录。我很高兴我做到了。这是在app\Http\Controller\Admin中的UserController中,这是我在教程之后创建的一个文件。
我想要实现的和上面一样,但是当用户使用Laravel内置的注册系统时触发。我不知道在哪里找到这个文件,我想添加最后一段代码从上面到它,所以当他们注册到我的网站时,它会自动添加一个记录在位置表有关的新用户。
希望这是合理的。
发布于 2021-12-09 11:24:05
有几个选项可供您选择。您可以重写Laravel附带的RegisteredUserController.php文件并在其中添加代码,但是在用户模型上定义一个观察者(https://laravel.com/docs/8.x/eloquent#observers)既简单又整洁。
它监视发生在用户身上的任何“事件”(例如,当它们被创建、更新或删除时)。
所以利用工匠:
php artisan make:observer UserObserver --model=User将在App\观察者中创建一个文件夹(如果它还不存在),并在该文件夹中创建一个名为UserObserver.php的文件。该文件对于所有可以“观察”的内容都有样板方法(将为空),因此您希望找到如下所示的方法:
public function created(User $user)
{
//
}您将看到新创建的用户已经被传递给该方法,因此您只需实现已经创建位置并基于新用户填充位置的代码。
最后,您需要告诉Laravel存在观察者--在App\Providers\EventServiceProvider.php中有一个可能为空的boot()方法--您需要告诉它观察用户模型,当用户发生什么事情时,查看新创建的观察者,看看结果是否需要做任何事情。
public function boot()
{
User::observe(UserObserver::class);
}https://stackoverflow.com/questions/70288554
复制相似问题