我从笨来laravel并仍然相当新,所以原谅我,如果这是显而易见的。我正在努力尝试一些看起来很简单但在网上找不到任何信息的东西,但是发现了一些接近的软件包。增加公司注册于SaaS的应用Laravel
我已经在注册时添加了一个输入字段来捕获公司名称,一旦他们点击注册,它应该像添加用户信息一样将用户信息添加到用户表中,而且还将company_name添加到companies表的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
表中添加任何内容。
我怎么会去上添加注册创建领域用户在users
表时保存它添加到companies
表中输入company_name
然后和存储company_id
?
------------------------------------------- 修订 -------------------------------------------
这里是我的最新的认证/ RegisterController.php(我猜的最新版本Laravel Framework版本5.3.24休息验证了在各种控制器)
<?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'? –