Laravel Auth::user关系

14
Laravel 中,我正在尝试展示 Auth::user (用户) 和 部门 之间的关联元素。在 User 表中,我有 idnamedepartment_id。在 Departments 表中,我有 idname
在用户模型中,我创建了:
public function department()
    {
        return $this->belongsTo('App\Models\Department');
    }

然后,我在刀片模板中尝试:

Auth::user()->department

但是返回空值并且没有显示链接的部门。空值是不正确的,所有用户都有部门。所以,需要帮助吗?关系上有什么问题吗?

4个回答

30
您可以尝试使用这个User::with('departmento')->find(Auth::id());

我可以在boot中使用User :: with('departament') - > find(Auth :: id());来在所有模板中共享变量吗? - El Hombre Sin Nombre
在您的“Controller / BaseController”中添加以下代码: public function __construct() $user = User :: with('departament')-> find(Auth :: id()); View :: share('user',$ user); }顺便说一句,这不是一个好主意。 - Saiful Islam
查询数据库是没有意义的,因为Auth已经完成了这个任务!问题在于作者有一个外键,不符合Laravel Eloquent表关联的方式。在这种情况下,“singulartablename_id”。 - Gilberto Albino

16

这种方法使用的查询较少 - 其他方法需要两次查询用户表:


auth()->user()->load(['department']);


无法运行,我遇到了错误。 找不到“App\Models\ResellerUserDetailModel”类。 你从哪里加载“load方法”的表单? - Siraj Ali

5
当调用belongsTo方法时,应该将“department_id”作为第二个参数($foreignKey)添加进去,因为默认情况下它会搜索departmento_id。
public function departamento()
{
    return $this->belongsTo('App\Models\Departamento', 'department_id');
}

或者只需将User::departamento()方法重命名为User::department()

public function department()
{
    return $this->belongsTo('App\Models\Departamento');
}

实际上,由于该表不符合Laravel的Eloquent表关联方式,因此您必须传递外部id。在这种情况下,如果外部id不是“singulartablename_id”,它将无法正常工作。 - Gilberto Albino

3

关系与模型相关联。身份验证使用会话而不是关系。

请改用User模型。

  optional(User::find(Auth::id())->departmento)->department_name

我使用全局变量'user'和Auth::user()来避免重复编码,并可以在所有模板中显示/使用实际用户。所以你的答案是正确的,但我需要在所有模板中发送Auth::id... - El Hombre Sin Nombre
由于您已经在使用 Auth::user()->departmento,您只需要用上面的代码替换即可。 - Niklesh Raut
{{optional(User::find(Auth::id())->departamento)->name}} 返回 null - El Hombre Sin Nombre
请使用\Auth代替。 - Niklesh Raut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接