三种雄辩的关系

时间:2016-01-13 17:53:24

标签: php mysql laravel

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

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

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

当谈到雄辩的时候,我仍处于学习过程中,所以任何帮助都会受到高度赞赏。我不一定会找人为我建造这个,只是一些帮助,它会给我自己做的必要信息。感谢所有的帮助!

1 个答案:

答案 0 :(得分:0)

我几次都在努力解决这个问题。据我所知,我没有找到一种Laravel原生的编码方式来编写这种三种方式的多对多关系。我通常做的是为数据透视表创建一个模型。因此,将受保护的$ table属性设置为' exercise_permission_user'的SharedExercise模型(或您要使用的名称)。在该模型中,您可以设置与用户,练习和权限的关系。然后,你可以写:

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

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

相关问题