【问题标题】:Laravel 5.2 - Multiple relationsLaravel 5.2 - 多重关系
【发布时间】:2023-04-06 18:58:01
【问题描述】:

鉴于此表结构:

我的模型上有一个members 关系。

public function members() {
    return $this->belongsToMany('App\User', 'group_members')->withPivot('status', 'right_rid')->withTimestamps();
}

当我调用这个函数时,它会返回一个特定函数的成员。

现在我想调用一个名为 rights 或类似名称的函数,它将在一行代码中返回 right_idrights 表的类型。

现在,当我想要成员的right_id 时,我使用此行:

$group->members->where('id', Auth::user()->id)->first()->pivot->right_id

但是我没有rights 类型,因为right_idgroup_members 表中。

我希望它像这样工作:

$group->members->where('id', Auth::user()->id)->first()->rights

我希望这些信息足以给我一些建议,甚至是解决这个问题的方法。

我知道这也可以通过自定义查询来完成,但我喜欢 Laravel 的工作方式。

【问题讨论】:

  • 我已经修改了你的一些条款,应该没问题。
  • 乍一看在您的数据库结构图像中您有rights_rid,但随后您的代码中显示为right_id
  • 当您的所有表都没有时间戳时,您还有withTimestamps()
  • 您能解释一下您当前的表结构(用文字)和/或您设想的关系如何工作(用文字)吗? group_members 看起来像是一个错误 - 您实际上是在为用户和组之间的 link 分配权限。我希望权限属于用户或组。不知道你的目标是什么......

标签: php laravel laravel-5 eloquent laravel-5.2


【解决方案1】:

您可以轻松地制作GroupMember 模型并执行以下操作...

GroupMember::where('user_id', Auth::user()->id)->where('group_id', $group_id)->with(['rights', 'groups', 'users'])->get();

这假设您的 GroupMember 模型中有一个 rightsgroupsusers 方法。每个都应该是belongsTo

【讨论】:

  • 感谢您的评论。我创建了一个 GroupMember 模型。现在它可以工作了,我从 GroupMember 中创建了一个与 User 模型的 BelongsTo 关系,当我在一个组中调用成员时,它会给出该组中该用户的记录,这很正常。而当我想从中获取用户名时,我需要在 GroupMember 模型的用户函数中调用 belongsto 关系。但是有没有一种方法可以让我将这些组合到 1 中?
  • 是的,您可以将数组传递给with 函数。我会更新我的答案。
  • 我会调用 $group->members()->with(['user'])->get() 并提供数据,但我怎样才能输入这样的新记录?
猜你喜欢
  • 1970-01-01
  • 2016-09-27
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2016-06-23
相关资源
最近更新 更多