存储多对多关系时,从数据透视表中获取数据

时间:2018-01-15 10:46:07

标签: laravel eloquent laravel-eloquent

我在项目和调查之间有多对多的关系。我可以使用

成功地在调查和项目之间建立关系

$userSurvey = $project->surveys()->save($survey);

这将在question_survey数据透视表中创建一条新记录(数据透视表包含idquestion_idsurvey_id列。)

$userSurvey将收到新创建的调查模型。有没有办法在id数据透视表中接收新记录的question_survey

1 个答案:

答案 0 :(得分:1)

检索多对多关系时,Laravel会自动将 pivot 附加到生成的模型,因此在您的情况下,{{1会自动拥有一个名为$userSurvey的属性,当然也就是枢轴。

但默认情况下,pivot属性仅包含 外键 ,因此在您的情况下,pivot和{{1} }。如果您有任何其他额外属性(在您的情况下为question_id),只需使用survey_id方法,如下所示。

id

现在您可以从数据透视表中访问withPivot

public function surveys()
{
    return $this->belongsToMany('App\Question', 'question_survey')
                ->withPivot('id');
}

奖励,如果您认为id字词不符合您的措辞风格,只需使用您关系中的$userSurvey->pivot->id; 方法来自定义变量名称 枢轴属性

pivot

现在您可以从数据透视表中访问as

public function surveys()
{
    return $this->belongsToMany('App\Question', 'question_survey')
                ->as('question_survey')
                ->withPivot('id');
}