То, что вы хотите сделать, - это иметь один объект / модель БД для представления как викторины, так и видео, потому что, исходя из вашего объяснения, они должны рассматриваться как одно и то же, то есть оба они являются модулями.Разница только в типе.Это подразумевает, что вам нужен столбец типа в таблице БД, чтобы указать тип каждого модуля.Вам также понадобится столбец 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», а вопросы и ответы будут связаны только с тестами, а не с модулями, что для меня имеет больше смысла.