【问题标题】:How to update a table after I edited a field from another related table?编辑另一个相关表中的字段后如何更新表?
【发布时间】:2020-03-10 23:52:18
【问题描述】:

我目前正在处理一个项目,该项目有一个帐户管理部分,系统管理员可以在其中创建用户帐户。

[Users] 表有一个名为“Organization_name”的列,它是用户所代表的组织。提交表单后,“Organization_name”也会添加到 [Organization] 表的 [name] 字段下。这两个表通过“user_id”列关联(取自[Users]的“id”列)。

我设法创建了一个工作代码来添加一个 [Users] 帐户,该帐户还将组织名称添加到 [Organization] 表中,尽管现在我想知道如何创建一个还可以编辑 [ 中的行的函数每当我编辑 [User] 中的字段时,Organization] 表。

(例如,我将 [Users] 中 id=1 的“organization_name”字段从“Organization A”更改为“Organization B”,[Organization] 中 user_id=1 的“name”字段也应从“组织 A”到“组织 B”)。

注意:“role_id”确定用户帐户将拥有什么样的帐户权限,它不会影响问题,但我会将其留在下面的代码 sn-p 中以防万一。

我将附上我在下面使用的代码:

UserController.php


private static function createUser(Request $request)
    {
        $user = new User();
        $user->email = $request->get('email');
        $user->organization_name = $request->get('organization_name');
        $user->password = Hash::make($request->get('password'));
        $user->role_id = $request->get('role_id');
        return $user;
    }

private static function createSubUser(Request $request, $user_id)
    {
        $role_id = $request->get('role_id');
        if($role_id == 1)
        {
            $sub_user = new Organization();
            $sub_user->user_id = $user_id;
            $sub_user->name = $request->get('organization_name');

        }
        elseif($role_id == 2)
        {
            $sub_user = new Staff();
            $sub_user->user_id = $user_id;
        }
        elseif($role_id == 3)
        {
            $sub_user = new Administrator();
            $sub_user->user_id = $user_id;
        }
        return $sub_user;
     }

public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|string|email|max:255|unique:users',
            'organization_name' => 'required|string|max:255|unique:users',
            'password' => 'required|string|min:6',
        ]);

        if($validator->fails()){
            return response()->json($validator->errors()->toJson(), 400);
        }

        $user = static::createUser($request);
        $user->save();
        $sub_user = static::createSubUser($request, $user->id);
        $sub_user->save();

    }

public function updateUserInfo(Request $request)
    {
        $user = User::find($request->id);
         if($user->email == $request->email){
            $check_email = false;
        } 
        else{
            $check_user = User::where('email', $request->email)->first();
            if (!empty($check_user)) {
                $check_email = true;
            }
            else {
                $check_email = false;
            }
        }

        if($check_email === true)
        {
            return response()->json([
                'success' => false,
                'error' => "User with the registered email of {$request->input('email')} already exists",
            ]);
        }
        else 
        {
            $user = User::where('id', $request->id)->update([
                'email' => $request->input('email'),
                'organization_name' => $request->input('organization_name'),
                'role_id' => $request->input('role_id')

            ]);
            return response()->json([
                'success' => true,
                'user' => $user
            ]);
        }

    }

谢谢!

【问题讨论】:

  • 这里的 jQuery 相关性在哪里?
  • 在表上创建触发器以进行更新可能更容易。或者有一个包含组织名称的单独表格。然后在与该名称相关的表中添加一个 fk
  • @hurnhu 如何让这个触发器更新?我已经有一个带有组织名称的单独表,表 [Organization](它在 createSubUser 函数下),而 user_id 是该表与 [Users] 表相关联的原因。
  • 假设您使用的是 mysql mysqltutorial.org/create-the-first-trigger-in-mysql.aspx。如果您已经有一个单独的表,为什么组织名称也存储在 [User] 表中?
  • @hurnhu [Users] 表中的组织名称是可填写的,在那里输入的任何内容都将被镜像并创建到 [Organization] 表中。我已经成功完成了这部分,我只是想知道每当我从 [Users] 表中更新“organization_name”字段时,如何从 [Organization] 表中更新字段“名称”

标签: php laravel


【解决方案1】:

为什么需要在组织上添加 user_id??
一个组织应该有很多学生或用户。
无需在用户表上存储组织名称,只需保存组织的 ID。
当您需要更新组织名称时,只需在组织表上更新它。
因为您不不需要更改用户表,您只需在此处保存 id。
如果您有任何困惑,请随时发表评论。

【讨论】:

  • 我正在制作的系统是一个组织总裁列表,这就是为什么每个组织只有一名代表(总裁)。 [Users] 表上有一个 Organization_name 列,因为当他们注册时,他们将其组织的名称放入其中。然后系统添加他们放在 [Organizations] 表中的组织,列如下: - user_id - name (the organization_name) 你能建议一种方法,这样当我在 [Users] 表中更新 Organization_Name 时,它​​会是否也反映在 [Organizations] 表的名称列中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
相关资源
最近更新 更多