Laravel 与 auth() 建立关系

Posted

技术标签:

【中文标题】Laravel 与 auth() 建立关系【英文标题】:Laravel getting realtionship with auth() 【发布时间】:2018-02-15 17:22:55 【问题描述】:

我在User有如下关系。

public function partner()

    return $this->hasOne('App\Partner','partner_id');

我正在访问这种关系

auth()->user()->partner()->name

但它给了我一个例外,namepartners 表中可用:

未定义属性:Illuminate\Database\Eloquent\Relations\HasOne::$name`

而来自auth()->user()->partner() 的用户对象也是空的。

我错过了什么?

【问题讨论】:

使用的是什么 Laravel 版本? 【参考方案1】:

auth()->user()->partner() 返回关系绑定,而不是模型本身。

改用auth()->user()->partner->name

【讨论】:

以下错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'partners.user_id' in 'where clause' 您能添加一张您的数据库表结构的图片/示意图吗?【参考方案2】:

首先,确保设置正确的关系:

User.php

public function partner()

  return $this->hasOne('App\Partner');

Partner.php

public function user()

  return $this->belongsTo('App\User');

访问用户的合作伙伴:

// Get the user's Partner instance:
$partner = auth()->user()->partner;

// Access the user's partner properties:
$partner_name = auth()->user()->partner->name;

另外,请检查您的 partners 表是否包含 user_id 列。

【讨论】:

【参考方案3】:

我认为你做错了,你所要做的就是改变:

public function partner()

    return $this->hasOne('App\Partner','partner_id');

public function partner()

    return $this->belongsTo('App\Partner');

一个用户属于一个伙伴,因为伙伴是一个元表。

【讨论】:

完美,非常感谢

以上是关于Laravel 与 auth() 建立关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 Auth::User() 与关系不起作用

如何缓存 auth()->user() 与 Laravel 缓存中的角色关系,以减少对数据库的调用?

Laravel 模型关联建立与查询

laravel 仅为“auth”用户加载特定关系

Laravel 8 的嵌套关系访问

Laravel Auth::attempt() 可以处理关系吗?