我有作业模型和用户模型。我需要每个用户能够根据特定的作业回答几个问题。每个问题都标记为1到10(或未答复)。
我相信我需要一个hasMany through
关联,但之前一直对它们感到困惑。
有人可以帮我处理我的数据库/模型布局。感谢。
修改
答案 0 :(得分:2)
我认为应该是:
表:用户,工作,问题,答案
您的答案表可以包含以下列:user_id,question_id,answer(NULL或1-10)
如果它以某种方式集成到作业,则不需要问题表。
编辑:已根据评论建议更新,以从答案表中删除多余的 ID 。
答案 1 :(得分:2)
是的,对于hasMany来说是完美的候选人,我会这样做:
User hasMay JobQuestion
Job hasMany JobQuestion
JobQuestion belongsTo Job, User
将所有问题都放在JobQuestion模型中。此模型可能有更合适的名称。您是否需要有关模型键的更多详细信息?
编辑:
JobQuestion模型中的一行将:
id | user_id | job_id |问题1 | ...... | 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
)
)
)
答案 2 :(得分:1)
如果我正确理解您的模型,听起来像用户选择工作,然后回答特定于该工作的问题(其中一些可能适用于多个工作)?如果是这样我认为你的表结构应该是这样的:
首先是你的离散实体。
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将包含JobID上的复合FK和与Job_Questions相关的QuestionID以及返回给用户的另一个FK。
答案 3 :(得分:0)
Job hasAndBelongsToMany问题,因为同一个问题可以应用于多个工作。
但是,为了实现您的答案,您可以使用此方法HasManyThoughJoin。在JobQuestion表中,您可以存储答案和user_id。