在这种情况下我应该使用什么雄辩的关系?

时间:2018-01-25 20:23:57

标签: database laravel laravel-eloquent

我真的很困惑我应该将这种关系用于这种数据结构。为了使一切都可以理解,我有这个脚本系统,你在那里制作一个部分,然后你将一个问题附加到该部分,问题有很多选项(答案),如果用户现在点击该选项有效,每个选项都有一个目标部分。得到了一切都弄清楚了。但我想提出问题和选项可以从任何部分重复使用,但我无法做到这一点,因为如果有意义,选项目标部分必须与每个部分不同。我真的很困惑,哪种方法最好,我可以做得很脏,但我想以最好,最干净的方式做到这一点。

基本上 我目前有

科目 姓名,身体

问题专栏 name,question,section_id

选项Col name,value,question_id,target_section

我希望问题可以在任何部分重复使用,但我希望Options target_section字段与每个部分不同。

2 个答案:

答案 0 :(得分:1)

我建议你将该部分的hasMany关系与问题进行关联,然后对问题和部分的选项进行一对一的关系,并对问题和选项进行hasMany关系。如果你能为想要实现的目标发布代码或相关数据,我可以更好地解释你。

答案 1 :(得分:0)

虽然我不完全理解你的问题,但我可以尝试尽我所能,直到你解释一下你想要达到的最终结果。

您可以设置数据库和模型,如下所示......

章节表 这将有列:

id, name, body

模型看起来像这样:

Section.php(章节型号)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Section extends Model
{
    public function question()
    {
        return $this->hasOne('App\Questions');
    }
}

问题表 这将有列:

id, section_id, name, body

你的问题模型可能看起来像这样:

Questions.php(问题模型)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Questions extends Model
{
    public function options()
    {
        return $this->hasMany('App\Options');
    }

    public function section()
    {
        return $this->belongsTo('App\Section');
    }
}

最后,你的选项表 选项表 这将有列:

id, questions_id, section_id, name, body

使用类似于:

的模型

Options.php(选项模型)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Options extends Model
{
    public function question()
    {
        return $this->belongsTo('App\Questions', 'id');
    }
}

这样的关系可以让你做以下事情:

$question->options 

获取与该问题相关的选项

$section->question 

获取与该部分相关的问题

$question->section

获取与该问题相关的部分