簡體   English   中英

Laravel,多行模型數據庫設計

[英]Laravel, Database design for multiple model in one row

我正在構建一個顯示諸如Udemy之類的模塊列表的應用程序。 下面是我要實現的簡化示例。

(這不是數據庫表,這是界面圖)

No   Module name               Type
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中訂購模塊,因此,每個模塊在數據庫中都會有一個訂購列。

問題是:

我們如何在數據庫中對模塊->視頻,模塊->測驗建模? 我必須建立什么樣的表關系?

您可以參考Laravel雄辯的關系: 鏈接

使用此功能,您將需要三個表格:模塊,測驗和視頻

您想要做的是,有一個數據庫對象/模型來表示測驗和視頻,因為根據您的解釋,它們將被視為同一事物,即它們都是模塊。 唯一的區別在於類型。 這意味着您需要在DB表中有一個“類型”列,以指示每個模塊的類型。 您還需要一個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'); } } 

話雖這么說,但我認為這不是解決此問題的最佳方法。 如果您想做的是開設一門課程,該課程包含多個模塊,並且還可能包含一個測驗,那么您真正應該做的是將模塊模型與測驗模型相關聯,直接轉換為課程模型。 因此,課程與模塊具有一對多的關系,與測驗具有一對多的關系。 這樣,就不需要“類型”列,問題和答案僅與測驗有關,而與模塊無關,這對我來說更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM