Я прихожу от codeigniter к laravel и все еще довольно новичок, поэтому извините, если это очевидно. Я борюсь с чем-то, что кажется довольно простым, но не может найти информацию в Интернете, но нашел несколько пакетов, которые приближаются.Добавление регистрации компании в приложение SaaS Laravel
Я добавил поле ввода для регистрации, чтобы зафиксировать название компании, после того как они нажмут регистр, он должен добавить информацию о пользователе в таблицу пользователя, как это происходит, а также добавить имя_компании в столбец company_name таблицы компаний.
компании Таблица: Таблица
+----+----------------+----------------+--------------+
| ID | company_name | created_at | updated_at |
+----+----------------+----------------+--------------+
Пользователь:
+----+------------+------+-------+----------+----------------+------------+------------+
| ID | company_id | name | email | password | remember_token | created_at | updated_at |
+----+------------+------+-------+----------+----------------+------------+------------+
компаний Модель:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Companies extends Model
{
//
//
protected $fillable = [
'company_name',
];
}
пользователя Модель:
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
class User extends Authenticatable
{
use EntrustUserTrait;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function Company()
{
return $this->hasMany('App\Companies');
}
}
И в моем AuthController:
namespace App\Http\Controllers\Auth;
use App\User;
use App\Companies;
use Validator;
use App\Http\Controllers\Controller;
use App\Http\Controllers\CompanyController;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
/**
* Where to redirect users after login/registration.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => ['logout', '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, [
'company_name' => 'required|min:5|unique:companies,company_name',
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$user->Company()->create(['company_name'=>$data['company_name']]);
$user->attachRole(1); // parameter can be an Role object, array, or id
return $user;
}
}
И, наконец, здесь есть форма в моем register.blade.php
<div class="register-box-body">
<div class="register-box-body">
<p class="login-box-msg">Register a new membership</p>
<form action="{{ url('/auth/register') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group has-feedback">
<input type="text" class="form-control" placeholder="Company name" name="company_name" value="{{ old('company_name') }}"/>
<span class="glyphicon glyphicon-globe form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="text" class="form-control" placeholder="Full name" name="name" value="{{ old('name') }}"/>
<span class="glyphicon glyphicon-user form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="email" class="form-control" placeholder="Email" name="email" value="{{ old('email') }}"/>
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Password" name="password"/>
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Retype password" name="password_confirmation"/>
<span class="glyphicon glyphicon-log-in form-control-feedback"></span>
</div>
<div class="row">
<div class="col-xs-8">
<div class="checkbox icheck">
<label>
<input type="checkbox"> I agree to the <a href="#">terms</a>
</label>
</div>
</div><!-- /.col -->
<div class="col-xs-4">
<button type="submit" class="btn btn-primary btn-block btn-flat">Register</button>
</div><!-- /.col -->
</div>
</form>
Это все кажется правильным основанный на this question's answer. Однако, когда я регистрирую его, он просто создает информацию о пользователе в таблице users
с company_id
: 0
и ничего не добавляет к таблице companies
.
Как бы идти о добавлении создания поля при регистрации для пользователя, чтобы ввести company_name
, а затем при сохранении он добавляет к companies
таблице и сохраняет company_id
в users
таблицы?
------------------------------------------- ОБНОВЛЕНО -------------------------------------------
Вот моя последняя Auth/RegisterController.php (я предполагаю, что последняя версия Laravel Framework версии 5.3.24 разрывы Auth в различных контроллерах)
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Company;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after login/registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* 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, [
'company_name' => 'required|unique:companies,company_name',
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$company = \App\Company::create(['company_name'=>$data['company_name']]);
$company->users()->create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
return $company;
// User::create([
// 'name' => $data['name'],
// 'email' => $data['email'],
// 'password' => bcrypt($data['password']),
// ]);
}
}
Ваш первый пример - это хорошо, второй - фактически тот же, но имеет менее логичный смысл. Однако оба должны работать. В любом примере создается компания, и у нее есть таблица «id» в вашей компании, которая не '0'? –