在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中
Posted
技术标签:
【中文标题】在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中【英文标题】:Save user's different type data in different tables while updating userprofile in jetstream update form 【发布时间】:2021-11-02 06:57:13 【问题描述】:我在 jetstream 注册表单中添加了另外两个表 Business
和 Bank
以及 User
。我在注册过程中一次成功地在所有这三个表中插入了数据。
我的 app/Actions/Fortify/CreatedNewUser.php
文件是:
<?php
namespace App\Actions\Fortify;
use App\Models\Team;
use App\Models\User;
use App\Models\Business;
use App\Models\Bank;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Laravel\Jetstream\Jetstream;
class CreateNewUser implements CreatesNewUsers
use PasswordValidationRules;
/**
* Create a newly registered user.
*
* @param array $input
* @return \App\Models\User
*/
public function create(array $input)
$user = User::create([
'user_id' => $input['user_id'],
'username' => $input['username'],
'name' => $input['name'],
'lname' => $input['lname'],
'email' => $input['email'],
'phone' => $input['phone'],
'cell' => $input['cell'],
'persnl_add1' => $input['persnl_add1'],
'persnl_add2' => $input['persnl_add2'],
'city' => $input['city'],
'province' => $input['province'],
'country' => $input['country'],
'web' => $input['web'],
'password' => Hash::make($input['password']),
]);
Business::create([
'user_id' => $input['user_id'],
'bsns_name' => $input['bsns_name'],
'bsns_add1' => $input['bsns_add1'],
'bsns_add2' => $input['bsns_add2'],
'bsns_city' => $input['bsns_city'],
'bsns_province' => $input['bsns_province'],
'bsns_country' => $input['bsns_country'],
]);
Bank::create([
'user_id' => $input['user_id'],
'branch_code' => $input['branch_code'],
'bank_name' => $input['bank_name'],
'acc_no' => $input['acc_no'],
'acc_title' => $input['acc_title'],
]);
return $user;
这里我在所有三个表中都插入了数据但是现在我想把这个用户数据放在更新表单中进行更新。我不知道在哪里更新 Business
和 Bank
表的数据以及 User
表。
这里是 app/Actions/Fortify/UpdateUserProfileInformation.php
<?php
namespace App\Actions\Fortify;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;
use Illuminate\Support\Facades\Hash;
class UpdateUserProfileInformation implements UpdatesUserProfileInformation
/**
* Validate and update the given user's profile information.
*
* @param mixed $user
* @param array $input
* @return void
*/
public function update($user, array $input)
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
'photo' => ['nullable', 'mimes:jpg,jpeg,png', 'max:1024'],
])->validateWithBag('updateProfileInformation');
if (isset($input['photo']))
$user->updateProfilePhoto($input['photo']);
if ($input['email'] !== $user->email &&
$user instanceof MustVerifyEmail)
$this->updateVerifiedUser($user, $input);
else
$user->forceFill([
'username' => $input['username'],
'name' => $input['name'],
'lname' => $input['lname'],
'email' => $input['email'],
'phone' => $input['phone'],
'cell' => $input['cell'],
'persnl_add1' => $input['persnl_add1'],
'persnl_add2' => $input['persnl_add2'],
'city' => $input['city'],
'province' => $input['province'],
'country' => $input['country'],
'web' => $input['web'],
])->save();
/**
* Update the given verified user's profile information.
*
* @param mixed $user
* @param array $input
* @return void
*/
protected function updateVerifiedUser($user, array $input)
$user->forceFill([
'name' => $input['name'],
'email' => $input['email'],
'email_verified_at' => null,
])->save();
$user->sendEmailVerificationNotification();
这里我看不到其他表的更新数据在哪里
【问题讨论】:
【参考方案1】:好吧,你可以这样做:
public function update($user, array $input)
// your function is fine ,dont change any thing but add this lines:
//find your model objects;
$business = Business::find([user_id=>$user->user_id]);
$bank= Bank::find([user_id=>$user->user_id]);
// start adding data to your first model:
$business->bsns_name = $input['bsns_name'],
$business->bsns_add1= $input['bsns_add1'],
.
.
.
$business->save();
// and do this with your $bank object too;
$bank->bank_name= $input['bank_name'],
.
.
.
$bank->save();
【讨论】:
非常感谢您的回答。但是您的答案只是为了保存/更新数据。我的第一个问题是将旧数据放入更新表单然后更新。如果可以,请指导我。 我认为最好的方法是将 $business 和 $bank 传递到您的视图并将每个数据添加到相关的表单输入值...以上是关于在jetstream更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中的主要内容,如果未能解决你的问题,请参考以下文章