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