我有一个名为jobs的表和另一个名为job_questions的表 - 一个工作可以有五个筛选问题。表job_questions是一种查找表,但有一些附加数据如下:
job_questions
-------------
job_id int
question_id int
question varchar
expected_answer enum ('y', 'n')
job_id | question_id | question | expected_answer
--------------------------------------------------------------
1 | 1 | Do you have experience | Y
没有一个叫做问题的表 - question_id只是指一个表格上的问题编号(1-5)你如何在laravel中绘制这样一个模型,因为你通常不会在laravel中有多对多的模型类?我是否为查找表创建了一个模型类,否则我将如何提取它包含的附加信息?
答案 0 :(得分:0)
如果一个问题可以在多个工作中,那么你确实有多对多的关系。
您需要一张工作表和一张表来表示数据。要真正建立关系,你需要一个数据透视表。基本上它会有job_id
和question_id
,所以如果工作3
有问题1
,2
和3
,那么会有三个问题此表中的行包含job_id 3
和三个question_id。
您不需要此数据透视表的模型,只需要两个实际数据的模型。
在您的模型中,关系函数不会发生太大变化。两者都有many
字:return $this->belongsToMany('App\Job', 'pivot_table_name', 'question_id_column', 'job_id_column')
。您也可以将此方法放在另一个模型中,这样您就可以查询关系,问题的工作和工作的问题。参数2和属于belongsToMany的参数是可选的,但您可能至少需要第二个来设置数据透视表名称。
这里的文档在这里: http://laravel.com/docs/5.0/eloquent#many-to-many 和 http://laravel.com/docs/5.0/eloquent#working-with-pivot-tables