【问题标题】:Three way Eloquent relationship三向口才关系
【发布时间】:2016-01-14 07:01:46
【问题描述】:

我正在从事的项目需要一种共享功能,这意味着当一个人创建一个练习时,他们可以选择与另一个人共享该练习并为该练习附加特定权限(即读取、写入或执行)。

我有三个表(都有模型):用户、练习和权限。在中间,我有一个 exercise_permission_user 表,它只有三列:exercise_id、permission_id 和 user_id,它们都是指向各自表的外键。

问题在于在 Laravel 5 中的这些表之间建立三向多对多关系。更具体地说,当一个人共享一个练习时,我需要输入正在共享的练习的 id,它正在被共享的用户with,以及附加到executive_permission_user 表中的权限。然后我需要能够查询该表的 user_id 并查看与某个用户共享的所有练习。如果用户 Mike 的 ID 为 3,那么我想查询该 ID 的中间表并找到他有权访问的练习以及他被授予的权限。

在 eloquent 方面,我仍在学习过程中,因此我们将不胜感激。我不一定要找人为我建造这个,只是一些帮助,可以给我自己做这件事所需的信息。感谢所有的帮助!

【问题讨论】:

  • 这个问题与本网站创始人要求您“不问”的许多属性相同。 stackoverflow.com/help/dont-ask 闲聊,对话和讨论的开放式请求,没有代码,没有明确的目标或系统定义。我们理解并同情您在将这个大问题分解为可定义的第一步时遇到了麻烦,但 stackoverflow 不适合举办这次头脑风暴会议。
  • 我很抱歉。我对 Stack Overflow 很陌生,如果不这么罗嗦,我找不到一种方法来描述我的问题。以后我会努力做到体贴入微的。
  • 听起来你的核心问题是:“我在 mysql 中有三个表,我想用以下属性对它们进行连接”。但是随后您混合了对框架和 PHP 语言的要求,以及有关权限的内容。在这次头脑风暴中,我可以看到大约 5 个非常具体的问题,如果你问其中任何一个(单个),你很可能会受到欢迎,聪明的人会突然做出有意义的回应。付出一些额外的努力,向我们展示你尝试了什么,发生了什么,以及你期望发生什么。 catb.org/esr/faqs/smart-questions.html#beprecise

标签: php mysql laravel


【解决方案1】:

我曾多次在这个问题上苦苦挣扎。据我研究,我没有找到一种 Laravel 原生的方式来编码这种三向多对多关系。我通常做的是为数据透视表创建一个模型。因此,SharedExercise 模型(或您要使用的名称)具有受保护的 $table 属性设置为“exercises_permission_user”。在该模型中,您可以设置与用户、练习和权限的关系。然后,你可以写:

$sharedExercises = SharedExercise::where('user_id', $userId)->get();

注意表和模型命名。我通常使用 laravel 的约定命名表,但是当我有这 3 种方式时,我会尝试找到一个比约定更具描述性的名称。因此,例如,而不是 exercise_permission_user 和 ExercisePermissionUser 模型,也许 shared_exercises 和 SharedExercise 名称更好。 请注意,这不是这样做的方法。这是我在文档中找不到约定的结果。

【讨论】:

  • 感谢您的回复!我不确定一个单独的模型是否可行,但采取这一步确实有助于解决这个问题。感谢您的帮助。
猜你喜欢
  • 2018-05-18
  • 2018-02-25
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-04
  • 2013-05-27
  • 2019-01-31
相关资源
最近更新 更多