在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 注册表单中添加了另外两个表 BusinessBank 以及 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;

这里我在所有三个表中都插入了数据但是现在我想把这个用户数据放在更新表单中进行更新。我不知道在哪里更新 BusinessBank 表的数据以及 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更新表单中更新用户配置文件时,将用户的不同类型数据保存在不同的表中的主要内容,如果未能解决你的问题,请参考以下文章

当字段值之一错误或留空时,不想提交表单

Mailchimp:自定义配置文件更新表单中的字段

在 Firebase-v9 中使用 Typescript 注册用户时如何更新用户配置文件?

如何更新用户表单中的条目?

使用 Django 表单编辑图像字段

使用 VBA 未打开表单时在访问中更新表单