在我的数据库设计中,我有两个表格,People
& Auth
。 Auth表保存认证信息和person_id,而People表保存所有其他信息(名称,地址等)。表格之间存在一对一的关系,如下面的模型所示。Laravel 5 - 注册时创建两张表
我已经分居了数据的原因分为两个表是因为在我的 应用程序,我将不得不谁没有认证 功能(用户到用户)许多人。
应用/ Auth.php
class Auth extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
public function person() {
$this->belongsTo('Person');
}
}
应用/ Person.php
class Person extends Model
{
public function auth() {
$this->hasOne('Auth');
}
}
在我AuthController :: create()方法,我试图既填充型号与用户提供的信息是这样的:
protected function create(Request $request)
{
$person = \App\Person::create($request->all());
$auth = new \App\Auth;
$auth->fill($request->all());
$auth->person_id = $person->id;
$auth->save();
return $person;
}
在我的应用程序中,我想授权一个用户并将$ user对象作为已认证的人员传递给后续路由。我是否正确地做这件事?这是最好的方法吗?如果您还可以解释如何在验证后检索$ user对象,那么还有Cookie和奖励点... $ user对象中不需要验证表数据。
编辑
我已经改变了我config/Auth.php
文件如下(感谢@ user3702268)的答案指出以反映更改。但是,我现在发现我的控制器有错误。在AuthController :: create()方法中,我返回App/Person对象,这会引发一个ErrorException
看到App/Person如何不实现Authorizable特性。我不希望我的App/Person对象是可授权的,但它是我希望在我的视图中作为已认证的$用户返回的对象。怎么样?我应该重写postRegister
方法吗?还是有更多的Laravel方法?
EDIT 2
我现在回到它采用authorizable性状$ AUTH对象。在我的意见/控制器我试图访问使用Auth::user()->person
但得到Class 'Person' not found
错误
我'配置/ Auth.php'注意到了,我也应该改变'“表” => 'auth''因为我的表名也不同。表格正在填充正确,我返回我的Person对象! +1 由于我将表格更改为auth,我的模型更改为Auth ...将导致与Auth外观发生冲突? –
不,你的Auth类应该在另一个名字空间中,默认是把它放在App \ Auth命名空间中。如果你想使用这两个类,你应该别名一个或两个例如 使用App \ Auth作为AuthModel使用Auth <---- Auth facade – leyduana
您应该返回您的Auth类,并且可以使用以下关系访问视图中的Person类: Auth :: user() - > – leyduana