我正在从事的项目需要一种共享功能,这意味着当一个人创建练习时,他们可以选择与另一个人共享该练习,并向该练习附加一定的权限(即读取、写入或执行) )。
我有三个表(所有表都有模型):用户、练习和权限。中间有一个exercise_permission_user表,它只有三列:exercise_id、permission_id和user_id,所有这些都是指向各自表的外键。
问题在于在 Laravel 5 中的这些表之间建立三向多对多关系。更具体地说,当一个人共享练习时,我需要输入正在共享的练习的 id、正在共享的用户with,以及附加到exercise_permission_user 表中的权限。然后,我需要能够查询该表的 user_id 并查看与某个用户共享的所有练习。如果用户 Mike 的 ID 为 3,那么我想在中间表中查询该 ID,并找到他有权访问的练习以及授予他的权限。
在 Eloquent 方面,我仍处于学习过程中,因此任何帮助将不胜感激。我不一定要找人为我构建这个,只是需要一些帮助,为我提供自己完成此任务所需的信息。感谢所有的帮助!
最佳答案
我曾多次被这个问题困扰。据我所知,我没有找到一种 Laravel 原生方式来编码这种三向多对多关系。我通常做的是为数据透视表创建一个模型。因此,SharedExercise 模型(或您要使用的名称)的 protected $table 属性设置为“exercises_permission_user”。在该模型中,您可以设置与用户、练习和权限的关系。然后,你可以写:
$sharedExercises = SharedExercise::where('user_id', $userId)->get();
注意表和模型的命名。我通常使用 Laravel 的约定来命名表,但是当我有这 3 种方式的多对多时,我尝试找到一个比约定更具有描述性的名称。因此,例如,代替exercise_permission_user 和ExercisePermissionUser 模型,也许shared_exercises 和SharedExercise 名称更好。 请注意,这不是这样做的方法。由于在文档中找不到约定,我就是这样做的。
关于php - 三种 Eloquent 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773653/