分配模型时,是否在null上调用成员函数details()?

时间:2019-09-18 20:55:03

标签: laravel laravel-5

使用模型为:

public function details()
{
    return $this->hasOne(UserDetails::class, 'user_id', 'id');
}

首先,我创建用户模型:

  $user = User::create([
                'email' => $request->inn,
                'password' => Hash::make($request->password),
            ]);

然后我尝试分配用户详细信息:

 $user->details()->create($user_details);

它向我返回此错误:

  

在null上调用成员函数details()

2 个答案:

答案 0 :(得分:2)

您没有提供有关此问题的大量信息,但是我建议该问题是未创建用户,因为保护了用户模型上的属性。

确保您的用户模型具有以下解决方案之一

protected $fillable = [
    'email',
    'password'
]

protected $guarded = []

未添加这些内容意味着Laravel将不允许您使用save()方法以外的任何方法向模型添加细节

答案 1 :(得分:1)

  

两种解决方案。

创建方法

如果您使用的是create方法,则不会像现在那样创建对象。

$userid = User::create([
          'email' => $request->inn,
          'password' => Hash::make($request->password),
        ])->id;

User::find($userid)->details()->create($user_details);

您的问题 $ user 没有得到对象,这就是您得到此错误的原因。

对象方法

$user = new User;
$user->email = $request->inn;
$user->password= Hash::make($request->password);
$user->save();

//here $user is an instance of User so if you dd($user) you'll get an object.

$user->details()->create($user_details);

希望这对您有用。