Laravel, Дизайн базы данных для нескольких моделей в одном ряду - PullRequest
0 голосов
/ 14 октября 2018

Я создаю приложение, которое показывает список модулей, таких как 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.

Здесь показан список модулей, и каждый модуль может быть видеомодулем или модулем викторины.

AВидео модуль имеет столбец видео URL в базе данных.Хотя модуль викторины полностью отличается от модуля видео.У него будут вопросы и ответы.

Мы можем заказать модули в CMS, поэтому каждый модуль будет иметь столбец заказа в базе данных.

Вопрос:

Как мы можем моделировать Модуль -> Видео, Модуль -> Викторина в базе данных?Какие табличные отношения мне нужно построить?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

То, что вы хотите сделать, - это иметь один объект / модель БД для представления как викторины, так и видео, потому что, исходя из вашего объяснения, они должны рассматриваться как одно и то же, то есть оба они являются модулями.Разница только в типе.Это подразумевает, что вам нужен столбец типа в таблице БД, чтобы указать тип каждого модуля.Вам также понадобится столбец URL, который должен быть (обнуляемым), т. Е. Необязательным, так как он понадобится, только если модуль имеет тип видео, как вы объяснили.Что касается вопросов и ответов, это должна быть связанная модель, потому что вопросы / ответы, вероятно, должны будут хранить свои собственные данные (например, made_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');
  }
  
  
}

При этом, однако, я не думаю, что это лучший способ приблизиться к этому.Если то, что вы пытаетесь сделать, - это иметь курс, который имеет несколько модулей и который также может иметь тест или тесты, то то, что вы действительно должны делать, это связать как модель модулей, так и модель тестов.непосредственно к модели курса.Таким образом, курс будет иметь отношение один ко многим с модулями и отношение один ко многим с тестами.Таким образом, нет необходимости в столбце «type», а вопросы и ответы будут связаны только с тестами, а не с модулями, что для меня имеет больше смысла.

0 голосов
/ 14 октября 2018

Вы можете обратиться к отношениям Laravel Eloquent: ссылка

Для этого вам понадобятся три таблицы: модули, тесты и видео

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...