php - 三种 Eloquent 关系

标签 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,并找到他有权访问的练习以及授予他的权限。

在 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/

相关文章:

php - PDO 中的操作数选择

PHP jQuery 传递多个单词的值

mysql - 我有 2 个 mysql RDS 主服务器,需要 ec2 机器上的 1 个从服务器作为它们的从服务器。是否可以通过在ec2上运行的mariadb来实现

php - 简单的 HTML DOM 解析器 - 发送 post 变量

php - 在页面上嵌入图表?

php - 根据 PHP 名称/值对数组将值输入 MySql 数据库

php - 如何在php中将mysql结果转换为数组?

mysql - 当主表与另一个多对一关系表连接时,字段的 SUM 相乘

php - Laravel - fatal error : Uncaught Error: Class 'Auth' not found

css - Laravel css 出现在标题标签上