【问题标题】:Laravel Auth::user relationshipLaravel Auth::用户关系
【发布时间】:2018-09-13 17:06:31
【问题描述】:

Laravel 中,我试图显示 Auth::user (Users) 和 Departments 之间的关系元素时间>。在 User 表中,我有 idnamedepartment_id。在 Departments 表中,我有 idname

在我创建的用户模型中

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

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

Auth::user()->部门

但返回 null 并且不显示 已链接 部门。 Null 不正确,所有用户都有部门。苏,¿有什么帮助吗? ¿ 有什么关系?

【问题讨论】:

    标签: laravel


    【解决方案1】:

    你可以试试这个User::with('departmento')->find(Auth::id());

    【讨论】:

    • 我可以使用 User::with('departament')->find(Auth::id());在启动时共享所有模板中的变量?
    • 在您的“Controller/BaseController”中添加以下代码:public function __construct() { $user = User::with('departament')->find(Auth::id()); View::share('user', $user); } Btw,这不是一个好主意。
    • 查询数据库没有意义,因为 Auth 已经完成了!缺少的一点是作者有一个外键,而不是抱怨 Laravel 的 Eloquent 关联表的方式。在这种情况下为“si​​ngulartablename_id”。
    【解决方案2】:

    你应该在调用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');
    }
    

    【讨论】:

    • 事实上,你必须传递外部 id,因为该表不符合 Laravel 的 Eloquent 关联表的方式。在这种情况下,如果外来 id 不是“singulartablename_id”,它将不起作用。
    【解决方案3】:

    关系适用于模型。 Auth 使用会话而不使用关系

    改用User 模型

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

    【讨论】:

    • 我使用全局变量 'user' 和 Auth::user() 以避免重复代码,并且可以在所有模板中显示/使用实际用户。所以你的答案是正确的,但我需要它在所有模板中发送 Auth::id...
    • 因为你已经在使用Auth::user()->departmento,你只需要用上面的代码替换
    • {{optional(User::find(Auth::id())->departamento)->name}} 返回null
    • 改用\Auth
    猜你喜欢
    • 2015-05-13
    • 2021-09-07
    • 2018-02-15
    • 2018-12-17
    • 2017-03-19
    • 2017-03-30
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多