我正在使用Laravel 4编写调查,需要用户能够多次进行相同的调查(并将他们的答案保存为不同的实例)。
我目前有一个名为survey_user的数据透视表,它将用户链接到受邀调查。数据透视表的一个潜在的积极副作用是,其主键可用于具有唯一的调查实例。
我的问题是弄清楚如何获得答案,特别是通过用户模型。答案表将包含数据透视表主表的外键。
我的用户模型:
class User extends Eloquent {
public function surveys() {
return $this->belongsToMany('Survey', 'survey_user')
->withPivot('id', 'completed_at');
}
public function answers() {
// This should return all of the user's answers, irrespective of
// survey id's.
}
}
表:
surveys: id
users: id
survey_user: id, survey_id, user_id, completed_at
answers: survey_user_id, answer_text, ...
我怎样才能实现这种伪关系,或者也许是一种更好的结构方式?
使用关系!以下是我会怎么做:
class User extends Eloquent {
public function surveys() {
return $this->belongsToMany('Survey');
}
public function answers() {
return $this->hasMany('Answer');
}
}
class Survey extends Eloquent {
public function surveys() {
return $this->belongsToMany('User');
}
public function answers() {
return $this->hasMany('Answer');
}
}
class Answer extends Eloquent {
public function survey() {
return $this->belongsTo('Survey');
}
public function user() {
return $this->belongsTo('User');
}
}