php - Laravel Eloquent 用于数据透视表,一个表有 2 个外键,另一个表有 1 个外键
问题描述
我有如下表,其中role_id
是表的外键,并且是roles
表的外键。user_id
setter_id
users
table 1:
+---------------------+
| users |
+---------------------+
| id |
| name |
| email |
| password |
+---------------------+
table 2:
+---------------------+
| roles |
+---------------------+
| id |
| name |
+---------------------+
pivot table:
+---------------------+
| role_user |
+---------------------+
| role_id |
| user_id |
| setter_id |
+---------------------+
我定义的模型:
用户模型:
class User extends Model
{
public $timestamps = false;
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
好榜样:
class Role extends Model
{
public $timestamps = false;
public function users()
{
return $this->belongsToMany(User::class);
}
}
如何更改模型以便获得如下所示的数据?
user -> roles -> setter :用户及其角色以及用户的每个角色的设置器
谢谢...
解决方案
您可以更新belongsToMany
调用以将 setter_id 也包含在枢轴上,然后通过访问它->pivot->setter_id
并使用该 id 检索模型。
return $this->belongsToMany(Role::class)->withPivot('setter_id');
或者(以及我个人想要的)您可以定义一个自定义数据透视模型,并在那里创建一个setter()
关系,这样您就可以直接从数据透视中检索模型。
推荐阅读
- reactjs - 从窗口获取路径名并将其存储在状态中以在 fetch 函数中使用
- ruby-on-rails - 如何从 Rails 中的 f.select 中删除 Null 值?
- opencv - “'cv2.face'没有属性'LBPHFaceRecognizer_create'”但是如果从pip安装,gui会给出qt线程错误
- cloud-foundry - 无法使用 Steeltoe 中的配置服务器服务从 GIT 存储库中读取属性键值
- c - C程序,将参数传递给信号处理函数?
- android - Android Studio Layout Preview 卡住加载
- sql-server - 将 Excel 数据从 Azure Data Lake 加载到 Azure SQL 的理想方式
- c# - 直接访问 UserControl 的 DataContext,无需中介 DepProps:可能吗?
- c# - 将 C# 数组作为函数参数传递以分配其内存不起作用
- android - 如何让 TalkBack 按顺序读取 Android 辅助功能事件而不切断它们