Как вставить в несколько таблиц при регистрации пользователя и отредактировать регистрацию с
Как мне вставить строки в несколько таблиц (таблица пользователей по умолчанию и таблица родителей) при регистрации нового пользователя?
Я знаю, мне нужно редактировать модели, AuthController и просматривать.
Моя модель пользователя:
namespace Jcfk\Models\User;
class User extends Model implements AuthenticatableContract,
CanResetPasswordContract
{
use Authenticatable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'user';
/**
* @var string
*/
protected $primaryKey = 'user_id';
/**
* @var bool
*/
public $timestamps = false;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['email', 'password'];
/**
* The attributes excluded from the model JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
public function parents() {
return $this->hasOne("app\Models\Parents");
}
/**
* Is the current user an admin
*
* @return bool
*/
public function isAdmin() {
return $this->role_id === Role::ADMIN;
}
public function isParents() {
return $this->role_id === Role::PARENT;
}
}
Модель родителей:
namespace Jcfk\Models\Parents;
class Parents extends Model
{
protected $table = 'parent';
public $timestamps = false;
public $primaryKey = 'user_id';
protected $fillable = ['name', 'phone', 'address', 'city_id', 'region',
'postalcode'];
public function user() {
return $this->belongsTo("app\User");
}
}
Контроллер Auth:
namespace Jcfk\Http\Controllers\Auth;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Routing\Registrar;
use Jcfk\Models\User;
use Jcfk\Models\Parents;
use Validator;
use Jcfk\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers;
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct(Guard $auth, Registrar $registrar) {
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data) {
return Validator::make($data, [
//'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:user',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data) {
$user = new User($data);
$parents = new Parents($data);
$user->save();
$user->Parents()->save($parents);
}
}
Поля базы данных родительских элементов user_id
, name
, phone
, address
,...
Полями базы данных пользователя являются user_id
, email
, password
,...
Мне также нужна помощь с моим файлом register.blade.php
<form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/register') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input type="text" class="form-control" name="name" value="{{ old('user_id') }}">
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input type="email" class="form-control" name="email" value="{{ old('email') }}">
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input type="password" class="form-control" name="password">
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label">Confirm Password</label>
<div class="col-md-6">
<input type="password" class="form-control" name="password_confirmation">
</div>
</div>
<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Register
</button>
</div>
</div>
</form>
Ответы
Ответ 1
Создайте слой службы или репозитория.
Создайте репозиторий :
<?php
namespace App\Models\Repositories\User;
use App\Models\Entites\User;
use App\Models\Entites\Parent;
class UserRepository implements UserInterface
{
public function create($input)
{
$user = new User($data);
$parents = new Parents($data);
$user->save();
$user->Parents()->save($parents);
return $user;
}
}
Это реализует интерфейс, поэтому мы можем сопоставить интерфейс с его реализацией, поэтому его можно ввести:
<?php
namespace App\Models\Repositories\User;
interface UserInterface
{
public function create($input);
}
Создайте поставщика услуг, чтобы его можно было ввести:
<?php
namespace App\Models\Repositories\User;
use Illuminate\Support\ServiceProvider;
class UserRepositoryServiceProvider extends ServiceProvider
{
/**
* Registers the UserInterface with Laravels IoC Container
* @return void
*/
public function register()
{
$this->app->bind('App\Models\Repositories\User\UserInterface', 'App\Models\Repositories\User\UserRepository');
}
}
Добавьте своего провайдера в файл config/app.php
:
'providers' => [
/*
* Laravel Framework Service Providers...
*/
/*
* Your providers
*/
App\Models\Repositories\User\UserRepositoryServiceProvider::class,
],
Теперь в ваших методах контроллера вы можете сделать это:
use App\Models\Repositories\User\UserInterface;
protected function create(UserInterface $userRepository, array $data) {
$userRepository->create($data);
}