在 laravel 中将一些用户信息保存到不同的表中

Posted

技术标签:

【中文标题】在 laravel 中将一些用户信息保存到不同的表中【英文标题】:Saving some user information to a different table in laravel 【发布时间】:2020-12-07 13:51:19 【问题描述】:

我已尝试添加以对注册控制器进行一些修改。我想将一些用户记录添加到不同的表中,但我做不到。我能够使用 dd($data) 捕获所有字段。但我无法将数据保存到 userRecord 表中。

在注册控制器中

 protected function validator(array $data)
    
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
            'phoneno' => ['required', 'string', 'min:11']
            'areas' => ['required', 'string']

        ]);
        

protected function create(array $data)
    
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
        $user->attachRole('user');
        $userRecord = new UserRecords();
        $userRecord->phoneno = $data->phoneno;//additional fields
        $userRecord->email= $data->email;
        $userRecord->areas= $data->areas;//additional fields
        $userRecord->save();
     

我的模型

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class userRecords extends Model

     protected $fillable = [
        'name', 'email','phoneno','location',
    ];

我的观点

@extends('layouts.app')

@section('content')
<div class="container mt-4">
    <div class="row justify-content-center">
        <div class="col-md-6">
            <div class="card">
                <div class="card-header bg-info text-white"> __('Register') </div>

                <div class="card-body">
                    <form method="POST" action=" route('register') ">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right"> __('Name') </label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value=" old('name') " required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong> $message </strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                          <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right"> __('Phone Number') </label>

                            <div class="col-md-6">
                                <input id="phoneno" type="text" class="form-control">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right"> __('E-Mail Address') </label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value=" old('email') " required autocomplete="email">

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong> $message </strong>
                                    </span>
                                @enderror
                            </div>
                        </div>
                           <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right"> __('Your Location') </label>

                            <div class="col-md-6">
                            <select name="areas" id="areas" class="form-control">
                          @foreach($areas as $item)
                            <option value=" $item->area "> $item->area</option>
                          @endforeach
                        </select>
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right"> __('Password') </label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong> $message </strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right"> __('Confirm Password') </label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                     __('Register') 
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

【问题讨论】:

你有什么错误吗? @ThânLƯƠNG yap 试图获取非对象的属性“phoneno” 我看到$data 是一个数组。但是,您将值作为对象。 你应该把$data-&gt;phoneno改成$data['phoneno']$data-&gt;email改成$data['email']$data-&gt;areas改成$data['areas']。有用吗? @ThânLƯƠNG 非常感谢,我在两个类中都添加了使用 Illuminate\Contracts\Auth\Authenticatable,现在可以了。但不确定它是否会引发另一个错误,因为我想避免使用 Auth 表 【参考方案1】:

试图获取非对象的属性“phoneno”

$data 是一个数组。但是,您会得到 $data 的值作为对象。您应该将 $data-&gt;phoneno 更改为 $data['phoneno']$data-&gt;email 更改为 $data['email']$data-&gt;areas 更改为 $data['areas']

2.

但不确定是否会引发另一个错误,因为我想避免使用 Auth 表

我认为您可以打开另一个主题来澄清这一点。

【讨论】:

【参考方案2】:

需要正确设置的几件事

您的模型是userRecords,所以在新建实例时new userRecords $data 是一个数组,因此使用数组语法$data['email'] 访问属性/元素 你需要在create方法中返回$user

protected function create(array $data)

    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);

    $user->attachRole('user');

    $userRecord = new userRecords();
    $userRecord->phoneno = $data['phoneno'];//additional fields
    $userRecord->email= $data['email'];
    $userRecord->areas= $data['areas'];//additional fields
    $userRecord->save();

    return $user;

【讨论】:

以上是关于在 laravel 中将一些用户信息保存到不同的表中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7 多重身份验证与 3 个不同的表 [关闭]

如何在 Laravel 中将连接结果作为对象数组获取?

如何在laravel中将用户帖子保存在数据库中?

使用 laravel 将数据保存在 2 个不同的表中

在 laravel 中将“历史数据”存储到数据库中的正确方法是啥?

从 laravel 的不同表中获取每个 id 的总数