我正在构建一个应用程序,它显示了像Udemy这样的模块列表。下面是我正在尝试实现的简化示例。
(这不是数据库表,这是接口图示)
No Module name Type1 Introduction Video
2 What is Composer? Video
3 Model View Controller Video
4 Blade Templating Engine Video
5 Quiz - First Quiz Quiz正如您所看到的,这是您通常在Udemy或Lynda等在线教育网站上看到的内容。
它显示了一个模块列表,每个模块可以是视频模块或测验模块。
视频模块在数据库中有一个视频URL列。而测验模块与视频模块完全不同。它将有问题和答案。
我们可以在CMS中对模块进行排序,因此,每个模块在数据库中都有一个order列。
问题是:
我们如何在数据库中对模块->视频、模块->测验进行建模?我需要建立什么样的表关系?
发布于 2018-10-15 01:43:35
你可以参考Laravel Eloquent的关系:link
通过使用它,您将需要三个表:模块、测验和视频
发布于 2018-10-15 02:05:31
你想做的是,有一个db对象/模型来同时表示测验和视频,因为根据你的解释,它们将被视为-相同的东西,即它们都是模块。唯一的区别是类型不同。这意味着您需要在DB表中有一个“type”列,以指示每个模块的类型。您还需要一个URL列,它应该是(可空的),即可选的,因为只有当模块是视频类型时才需要它,正如您所解释的那样。关于问题和答案,这需要是一个相关的模型,因为问题/答案可能需要存储他们自己的数据(例如created_at等),因此,我想说你可能需要一个问题模型(DB对象)以及一个答案模型。这些模型中的每一个都有一个module_id列,用于将它们链接到它们所属的模块。您雄辩的模型关系将如下所示
<!--module model-->
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Module extends Model
{
public function questions(){
return $this->hasMany('App\Question');
}
public function answers(){
return $this->hasMany('App\Answer');
}
}
<!--Question model-->
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Question extends Model
{
public function module(){
return $this->belongsTo('App\Module');
}
}
<!-- Answer Model -->
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Answer extends Model
{
public function module(){
return $this->belongsTo('App\Module');
}
}
话虽如此,但我不认为这是解决这个问题的最佳方式。如果你正在尝试做的是,有一个课程,它有几个模块,并且还可以有一个或多个测验,那么你真正应该做的是将a模块模型和测验(Es)模型直接关联到课程模型。因此,一门课程与模块之间是一对多的关系,与测验之间也是一对多的关系。这样,就不需要“类型”栏了,问题和答案只与测验相关,而不是与模块相关,这对我来说更有意义。
https://stackoverflow.com/questions/52805197
复制相似问题