Laravel Pivot表和间接关系

时间:2013-11-06 06:32:27

标签: php laravel laravel-4 eloquent

我正在与Laravel 4一起编写调查,并且需要能够让用户多次进行相同的调查(并将他们的答案保存为不同的实例。)

我目前有一个名为survey_user的数据透视表,用于将用户链接到受邀的调查。数据透视表的潜在积极影响是其主键可用于拥有唯一的调查实例。

我的问题是弄清楚如何获得答案,特别是通过用户模型。 Answers表将包含数据透视表主要的外键。

我的用户模型:

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, ...

我怎样才能完成这种假性关系或者更好的结构化方法?

1 个答案:

答案 0 :(得分:0)

使用关系!我就是这样做的:

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');
    }
}