更新:为啥当用户是管理员时关系有效,但当普通用户时不会?

Posted

技术标签:

【中文标题】更新:为啥当用户是管理员时关系有效,但当普通用户时不会?【英文标题】:Updated: Why relationship works when user is Admin, but won`t when Regular user?更新:为什么当用户是管理员时关系有效,但当普通用户时不会? 【发布时间】:2018-07-21 02:53:35 【问题描述】:

我有 3 个模型:用户、角色和货币。我对他们之间的关系感到困惑。

然后用户是管理员这工作:

Auth::user()->currency->symbol)

当普通用户出现错误时:

试图获取非对象的属性

如果 dd(Auth::user()) 它显示用户,但无法访问与模型货币的关系。为什么会这样?

用户模型关系:

    public function currency()

    return $this->belongsTo(Currency::class, 'currency_id');

货币模型关系:

    public function created_by()

    return $this->belongsTo(User::class, 'created_by_id');

如果您需要更多信息,请告诉我。

【问题讨论】:

有什么问题? 【参考方案1】:

用户模型

public function currency()

    return $this->belongsTo(Currency::class);

货币模型

public function users()

    return $this->hasMany(User::class, 'created_by_id');

假设您的 User 模型具有属性 currency_id

【讨论】:

错误:试图获取非对象的属性 使用出现该错误的代码更新您的问题 更新了我的问题 将您的error 堆栈跟踪发布到paste.laravel.io,保存并在您的问题中发布链接。 在此之前,请像我的回答一样更新您的货币和用户模型【参考方案2】:
$this->belongsTo(TABLE, FORIEGN KEY, TABLE KEY);

参考this

用户模型

public function currency()

    return $this->belongsTo(Currency::class, 'currency_id', 'id');

货币模型

public function users()

    return $this->hasMany(User::class, 'created_by_id', 'id');

【讨论】:

更新了我的问题

以上是关于更新:为啥当用户是管理员时关系有效,但当普通用户时不会?的主要内容,如果未能解决你的问题,请参考以下文章

linux 从普通用户切换为管理员时用 su 命令为啥提示输入密码,按啥键光标都没反应。

当用户是管理员时,为啥 .NET 应用程序不能覆盖文件?

为啥当应用转移到新的应用商店帐户时,所有用户都没有显示更新?

Firebase - 为啥不搜索在我的应用中工作的用户? (当用户输入两个字母时更新搜索控制器)

为啥linux系统 先用普通用户进入 再切换成管理员?

当应用被用户杀死时,工作管理器不工作。为啥?