首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel,单行多模型数据库设计

问Laravel,单行多模型数据库设计
EN

Stack Overflow用户
提问于 2018-10-15 01:23:02
回答 2查看 345关注 0票数 0

我正在构建一个应用程序,它显示了像Udemy这样的模块列表。下面是我正在尝试实现的简化示例。

(这不是数据库表,这是接口图示)

代码语言:javascript
复制
No   Module name               Type
代码语言:javascript
复制
1    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列。

问题是:

我们如何在数据库中对模块->视频、模块->测验进行建模?我需要建立什么样的表关系?

EN

回答 2

Stack Overflow用户

发布于 2018-10-15 01:43:35

你可以参考Laravel Eloquent的关系:link

通过使用它,您将需要三个表:模块、测验和视频

票数 0
EN

Stack Overflow用户

发布于 2018-10-15 02:05:31

你想做的是,有一个db对象/模型来同时表示测验和视频,因为根据你的解释,它们将被视为-相同的东西,即它们都是模块。唯一的区别是类型不同。这意味着您需要在DB表中有一个“type”列,以指示每个模块的类型。您还需要一个URL列,它应该是(可空的),即可选的,因为只有当模块是视频类型时才需要它,正如您所解释的那样。关于问题和答案,这需要是一个相关的模型,因为问题/答案可能需要存储他们自己的数据(例如created_at等),因此,我想说你可能需要一个问题模型(DB对象)以及一个答案模型。这些模型中的每一个都有一个module_id列,用于将它们链接到它们所属的模块。您雄辩的模型关系将如下所示

​

代码语言:javascript
复制
<!--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)模型直接关联到课程模型。因此,一门课程与模块之间是一对多的关系,与测验之间也是一对多的关系。这样,就不需要“类型”栏了,问题和答案只与测验相关,而不是与模块相关,这对我来说更有意义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52805197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档