laravel - 具有变量“模型”类型的 Laravel 关系组合成一个关系
问题描述
我需要以下设置:
Course
- --> hasMany "
Chapters
" - ----> hasMany "
Modules
"
到目前为止一切顺利,如果它会那么容易。但所谓的“模块”可能是:
Lesson::class
或一个Quiz::class
并且非此即彼的模型必须按特殊顺序排列,因此可能是:
Lesson
如何购买收件人Lesson
如何做煎饼Quiz
你知道煎饼的收据吗?Lesson
如何提供晚餐Lesson
如何握住叉子和刀子Quiz
你知道怎么吃煎饼吗?
所以我一般需要的是一种关系:
class Course {
public function items() {
// now there comes pseudo code
return hasMany Lesson::class AND/OR Quiz::class -> orderBy('position')
}
}
但是如何:grin:....我完全迷失了如何进行“创建”架构,如何检索模型等。
解决方案
你需要一个多态关系。一种可以转化为课程或测验的关系。 https://laravel.com/docs/7.x/eloquent-relationships#one-to-many-polymorphic-relations
courses
id - int
title - string
module_id - int
module_type - string
lessons
id - int
title - int
quiz
id - int
title - int
您只需要一个modules()
可以像这样定义的关系调用
class Course extends Model
{
public function modules()
{
return $this->morphTo();
}
}
因此,调用 Course::find(1)->modules
将为您提供课程和测验的集合。类存储在module_type
字段和 id 中,module_id
因此 Laravel 将知道要将记录投射到哪个类。
推荐阅读
- python - 如何将字符串数组的 numpy 数组转换为嵌套的 numpy 数组?
- typescript - Next.js 12 并删除 .babelrc,现在我收到 Typescript/Jsx 错误
- reactjs - 盖茨比阴影问题
- php - 如何通过分组来计算价值
- flutter - 如何显示选择的值?
- latex - 在 Latex 中添加图片时忽略边距并换行
- python - 如何将从 image_dataset_from_directory 获得的数据集拆分为数据和标签?
- vue.js - 为什么从另一个文件导入的 SCSS 变量在 Vue 3 中不起作用?
- autodesk-forge - 如何检查模型是否超出查看器容器?
- rust - 无法指定 `edition2021` 以在 Rust 中使用不稳定的包