【发布时间】:2020-07-03 15:16:26
【问题描述】:
我在 Laravel 中定义多态关系时遇到问题。
我有Skill 模型,它在其他两个模型User 和Class 之间共享。
所以 User 可以有很多技能,Class 可以有很多技能,但是技能之间没有重叠。
所以我用skill_id(这是技能表的外键)创建了一个skills_assoc 表
我无法正确设置 Class -> Skills() 函数来获取与该类相关的技能。
表skills
- 身份证
- 姓名
表skills_assoc
- 身份证
- skill_id - 技能表的外键
- skillable_id
- skillable_type
我的Classskills() 定义是
return $this
->morphedByMany(Skill::class, 'skillable', 'skills_assoc', 'skill_id', 'skill_id', 'skill_id');
问题是当我想得到$class->skills
并打印查询
$class->skills()->toSql()
我收到了这个奇怪的查询
select * from `skills`
inner join `skills_assoc` on `skills`.`id` = `skills_assoc`.`skill_id`
where `skills_assoc`.`skill_id` is null and `skills_assoc`.`skillable_type` = ?
where `skills_assoc`.`skill_id` is null
看起来很奇怪,我的收藏是空的,不知道为什么。
有错误的地方请指出,先谢谢了。
【问题讨论】:
-
您应该在
Class和User上使用morphToMany来检索技能,并在Skill上使用morphedByMany来获取反向关系,您可以阅读更多关于它的信息here . -
谢谢@Remul,您的解决方案完美运行,不知道为什么我以前没有看到它。但无论如何,我很感激你的正确答案。
-
如果您想接受,我添加了评论作为答案。如果您可以编辑我的答案并添加您的关系方法现在的外观,那就太好了。
标签: mysql laravel polymorphic-relationship