【问题标题】:Laravel: Get the ID of User::create and insert new row using that IDLaravel:获取 User::create 的 ID 并使用该 ID 插入新行
【发布时间】:2016-09-01 16:34:23
【问题描述】:

我在 Laravel 中有 AuthController,我有 2 个表,一个是 Users,一个是 Users_Information,我想在注册时插入到 Users_Information

所以我想从下面的方法中获取 id 并插入一个新行并将该行的列 ID 设置为我刚刚创建的用户的 ID。

     /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'username' => $data['username'] . ' ' . $data['username2'],
            'mail' => $data['mail'],
            'password' => bcrypt($data['password']),
        ]);
    }

我想在Users_Information 中插入一列idcurrent_foodcurrent_level

我有一个用于Users_Information 的控制器,名为UserInformation,我可以直接调用UserInformation::create,但如何从User::create 获取ID?

【问题讨论】:

    标签: php mysql laravel laravel-5


    【解决方案1】:

    尝试使用返回对象的->id,例如:

    $id = $this->create($data)->id;
    

    【讨论】:

    • @TheGod39 请将此答案设置为已接受,以便用户快速查看正确答案。
    • 使用 $insert = Model::create([]); $插入->id
    【解决方案2】:

    create() 方法返回模型。

    $user = User::create([
        'username' => $data['username'] . ' ' . $data['username2'],
        'mail' => $data['mail'],
        'password' => bcrypt($data['password']),
    ]);
    
    $userInfo = UserInformation::create([
        'user_id' => $user->id,
        'current_food' => $food,
        'current_level' => $level,
    ]);
    

    【讨论】:

    • create() 方法返回模型---这有帮助
    【解决方案3】:

    Eloquent 有一个很好的方法来处理saving relationships,可以在你的情况下使用。它允许您保存相关模型而无需直接访问模型。当然,您必须首先确保在适当的模型中定义了您的关系。

    下面将创建用户及其信息。我假设你的关系方法称为information,但你可以根据需要进行调整。

    $user = User::create([
        'username' => $data['username'] . ' ' . $data['username2'],
        'mail' => $data['mail'],
        'password' => bcrypt($data['password']),
    ])->information()->create([
        'current_food' => $current_food,
        'current_level' => $current_level
    ]);
    

    请注意,我们没有显式设置user_id,因为我们只是通过访问您定义的关系来创建信息; Laravel/Eloquent 为您处理!

    【讨论】:

      【解决方案4】:

      假设,我有一个模型名称Employee,我想在这个模型中插入一些数据也想获取表ID。所以我可以通过下面的代码轻松实现:

       $employee = new Employee();
       $employee->employeeName = 'Something';
       $employee->save();
       $employee->id;
      

      【讨论】:

        【解决方案5】:

        使用 insertGetId();它为您提供插入行的 ID。

        $userId = User::insertGetId([
            'name' => $request->input('name'),
             'email' => $request->input('email'),
             'password' => bcrypt($request->input('password')),
        ]);
        

        https://laravel.com/docs/5.7/queries#inserts

        【讨论】:

          【解决方案6】:

          另外,如果你不使用 Eloquent,你可以使用insertGetId

          $id = DB::table('users')->insertGetId(
              [ 'name' => 'John Doe', 'email' => 'john@example.com']
          );
          

          【讨论】:

            【解决方案7】:

            请记住,如果您使用自定义 ID 设置表格,则必须在代码中指明。就我而言,我的表“Antecedentes”具有自定义 id“ant_id”,因此“id”不起作用,必须像这样放置“ant_id”:

            $success = Antecedentes::create($data)->ant_id;
            

            我可以继续。

            【讨论】:

              猜你喜欢
              • 2023-03-22
              • 2018-05-26
              • 1970-01-01
              • 1970-01-01
              • 2018-02-12
              • 1970-01-01
              • 2013-10-06
              • 1970-01-01
              • 2014-01-31
              相关资源
              最近更新 更多