我有一个作业模型和一个用户模型。我需要每个用户能够根据特定的作业回答几个问题。每个问题从1到10分(或未回答)。
我相信我需要一个hasMany through
协会,但之前一直被这些混淆。
有人可以帮助我与我的数据库/模型布局。谢谢。
编辑:- 我现在唯一的表是用户和作业
- 每个职位的问题都是一样的,总共有六个(将来可能会更多)
- 问题将始终是数字从1到10(或未回答)
是的,是hasMany through的完美候选人,我将这样做:
User hasMay JobQuestion
Job hasMany JobQuestion
JobQuestion belongsTo Job, User
将所有问题放在JobQuestion模型中。这个模型可能有一个更合适的名字。您需要模型钥匙的更多细节吗?
编辑:JobQuestion模型中的一行将:
id | user_id | job_id | question1 |…| questionN
你的数据数组应该像
Array
(
[0] => Array
(
[JobQuestion] => Array
(
[id] => 1
[user_id] => 1
[job_id] => 1
[question1] => answer1
[question2] => answer2
)
[Job] => Array
(
[id] => 1
[name] => somejob
)
[User] => Array
(
[id] => 1
[username] => someuser
)
)
)
我认为应该是:
Tables: User, Job, Question, Answer
- hasMany 问题 用户
- hasMany 答案
- hasMany 答案
你的Answer表可以有以下列:user_id, question_id, Answer (NULL或1-10)
如果Question表以某种方式集成到Job中,则不需要Question表。EDIT:更新,根据评论建议从回答表中删除冗余的id
如果我正确地理解了您的模型,听起来像是用户选择工作,然后回答特定于该工作的问题(其中一些可能适用于多个工作)?如果是这样的话,我认为你的表结构应该看起来像这样:
首先是离散的实体。
Users:
UserID (PK)
User
Jobs:
JobID (PK)
JobName
注意,如果一些问题是一般性的,适用于多个工作,那么问题应该定义如下:
Questions
QuestionID (PK)
Question
否则,如果每个问题都特定于特定的工作,则可以避免至少一个关联表,并将FK合并到问题表中:
Questions
QuestionID
JobID
Question
但我不建议这样做,除非你确定每个工作都有独特的问题。
下一步,你的关联:
User_Jobs (Composite key = FK on USerID, FK on JobID)
UserID
JobID
Job_Questions (Composite Key = FK on JobID, FK on QuestionID)
JobID
QuestionID
User_Job_Questions (this one would contain a feild for responses, and could also be named User_Response)
UserID
JobID
QuestionID
Response (likley constrained to ints from 1-10)
注意User_Job_Questions将包含与Job_Questions相关的JobID和QuestionID的复合FK,以及与Users相关的另一个FK。
Job hasAndBelongsToMany问题,因为同一个问题可以应用于多个工作。
然而,要实现您的答案,您使用这种方法,一个hasmanythroughjoin。在JobQuestion表中,您可以存储答案和user_id。