首页 > 解决方案 > Laravel 为什么 $request->user() 关系不能正常工作?

问题描述

我很少有 $request->user->load() 关系:

Route::middleware(['auth:api','request.log'])->get('/user', function (Request $request) {
    return $request->user()->load('accesses');
});
Route::get('settings', function (Request $request) {
    return $request->user()->load('settings');
});
Route::get('logs', function (Request $request) {
    return $request->user()->load('logs');
});

但由于某种原因,第一个关系(“访问”)不能正常工作。我在用户登录后立即调用此路由以获取用户信息和他对不同站点模块的访问。它正确返回用户信息,但访问始终为空。此外, $this->id 不适用于此关系的模型内部,而适用于其他关系。我该如何解决?

与问题的关系

public function accesses()
{
    if (!($this->hasOne(UserAccesses::class)->exists())) { 
        $accesses = new UserAccesses();
        $accesses->user_id = Auth::id(); // $this->id don't work for some reason
        $accesses->disk = true;
        $accesses->mail = true;
        $accesses->calendar = true;
        $accesses->photos = true;
        $accesses->contacts = true;
        $accesses->save();
    }

    return $this->hasOne(UserAccesses::class);
}

几乎相同的关系可以正常工作

public function settings()
{
    if (!($this->hasOne(UserSettings::class)->exists())) {
        $settings = new UserSettings();
        $settings->user_id = $this->id;
        $settings->backup_password = '';
        $settings->backup_email = '';
        $settings->codeword = '';
        $settings->security_notifications = 0;
        $settings->password_changed_at = null;
        $settings->two_step_authentication = 0;
        $settings->save();
    }

    return $this->hasOne(UserSettings::class);
}

标签: phplaraveleloquent

解决方案


推荐阅读