laravel - Laravel:保存/附加/同步自定义枢轴模型(belongsToMany)
问题描述
希望你今天过得愉快。
我正在使用 Laravel 8。我有三个模型,我需要这些模型“纠缠”,可以这么说。
所以,我有三个基本表
areas,threats,positions
---
id
name
所以需要的关系是这样的:
- 每个都
t3
属于ToManyt1
,反之亦然。(多对多) - 每个
t3.t1
关系都属于ToManyt2
(多对多)
到目前为止,我的方法是这样的:
- 对于第一个关系,我在模型 (
t3.t1
) 上定义了 belongsToMany 关系。 - 对于第二个关系,我为数据透视表创建了一个自定义数据透视模型,在该模型中我定义了第二个多对多关系 (
t3t1.t2
)。
至此,第一个关系可以通过doing来保存$model->relatedModel()->attach($id);
。
现在,对于第二个关系,我该如何附加相关模型?
我最后的手段是查询保存的自定义数据透视模型并附加t2
模型,但我想先问一下是否有更清洁、更雄辩的 laravel方法来做到这一点。
任何建议都会有所帮助。提前感谢您抽出宝贵时间。
解决方案
我能想到的是两种方式,一种只是参考Spatie Laravel 角色权限
在 Spatie 中,这种关系类似于权限和角色之间的多对多关系以及多对多多态关系映射用户、角色和权限。
或者
在多对多枢轴关系中使用额外的属性。
return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');
并且 attach 和 detach 也接受额外的属性。
$user->roles()->attach($roleId, ['expires' => $expires]);
在检索时,您可以使用 where 子句来指定您的选择
return $this->belongsToMany('App\Role')->wherePivot('approved', 1);
我希望这会给你足够的想法来实现它。所有片段均来自文档,因此您可以直接搜索和参考
推荐阅读
- highcharts - 使用更高版本的 highcharts 时出错
- java - 在 RJEReader 的 nextMT() 函数中的线程“main”java.lang.NoSuchMethodError 中获取异常
- android - 使用 JavaCamera2View 捕获帧
- python-3.x - Sage 不显示/渲染 3D 图(部分解决)
- powerapps - 根据 d365 电源应用程序中的条件限制导航
- excel - 使用EXCEL中的IF函数搜索列表中的特定单词
- tinymce-5 - 如何在 TinyMCE 5 中更改对话框的 CSS
- api - 在 JMeter 中,当需要删除的文件存在于服务器上时,删除 API 不起作用
- c++ - 如何在具有唯一指针值的地图上使用 std::min_element?(C++)
- python - Python Pandas:将 DataFrame 简化为独特的组合