Pex*_*Pex 5 php laravel eloquent laravel-5
我正在尝试为注册用户创建个人资料页面.在此页面上将显示Auth\User数据(名称,电子邮件),但还会显示额外的个人资料信息(城市,国家/地区,电话号码等).
我已经建立了一对一的关系,但我有一个问题.创建用户后,我希望自动为该特定用户创建配置文件.
目前我只是通过修补程序为我的第一个用户添加了配置文件,但是一旦我创建了第二个用户并转到配置文件页面,它就会出错(看到该配置文件尚未制作).
在Profile.php我有:
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model {
protected $table = 'profiles';
protected $fillable = ['city', 'country', 'telephone'];
public function User()
{
return $this->belongsTo('App\User');
}
}
Run Code Online (Sandbox Code Playgroud)
在User.php中我添加了:
<?php namespace App;
...
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
use Authenticatable, CanResetPassword;
...
protected $table = 'users';
protected $fillable = ['name', 'lastname', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
public function Profile()
{
return $this->hasOne('App\Profile');
}
}
Run Code Online (Sandbox Code Playgroud)
我显示这样的个人资料数据(在我的profile.blade.php页面上):
Full name: {{ Auth::user()->name }} {{ Auth::user()->lastname }}
E-Mail Address: {{ Auth::user()->email}}
City: {{ Auth::User()->profile->city}}
Country: {{ Auth::User()->profile->country}}
Phone number: {{ Auth::User()->profile->telephone}}
Run Code Online (Sandbox Code Playgroud)
我猜我需要在'AuthenticatesAndRegistersUsers'特性和'Registrar.php'服务中添加一些内容,但我不知道是什么.
谢谢,
塞德里克
正如对您的问题的评论中所指出的,我相信这里最好的答案是将两个模型合并为一个用户模型。
但是,如果您想在创建用户时创建与用户的关系,则可以修改注册器服务。
该AuthenticatesAndRegistersUsers特征将使用注册器(app/Services/Registrar.php默认位于)来验证和注册用户。
您只需修改create其中的方法即可同时自动创建配置文件关系:
public function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$user->profile()->save(new Profile);
return $user;
}
Run Code Online (Sandbox Code Playgroud)