laravel中的数据透视表:如何访问不仅仅是id?

时间:2016-02-05 02:43:38

标签: laravel pivot

我正在开发我的第一个项目laravel 5.1,一个家谱。对于家庭电影,我有一个视频表和一个人员表,我有person_video数据透视表来跟踪人们在每个视频中出现的内容。该表还有一个描述栏,用于提示“0:29-0:35,朝前,戴帽子”。

Video.php有:

var app = angular.module('myApp', ['ngMaterial']);
app.controller('myCtrl', function ($scope) {

      $scope.tabs = [
          { title:'Page 1', content:'page1.html', thumbnail: 'http://i.imgur.com/2vl2MCk.png' },
          { title:'Page 1', content:'page2.html', thumbnail: 'http://i.imgur.com/GueewHO.png' }
      ];
});

然后当我显示给定视频中的人时,我有:

public function people()
{
    return $this->belongsToMany('App\Person', 'person_video');
}

显示人员的信息,但对于数据透视表,它只为我提供了video_id和person_id的值:

@foreach($video->people as $person)
    @include ('person.partials._person_link', ['person' => $person]):
    {{$person->pivot}} 
@endforeach

它不包括描述(或时间戳,不是我在这里需要的)。我怎么能有这样的描述出现?我希望能够使用{{$ person-> pivot-> description}},但是当我尝试时,没有什么可以显示它。

1 个答案:

答案 0 :(得分:1)

请参阅LaravelDocs/Eloquent/Working with pivot tables

  

默认情况下,只有pivot对象上的密钥才会出现。如果你的   数据透视表包含额外的属性,您必须在何时指定它们   定义关系:

return $this->belongsToMany('Role')->withPivot('foo', 'bar');
     

现在foobar属性可以在pivot模型的Role对象上访问。

所以你的Video::people()看起来像这样:

public function people()
{
    return $this->belongsToMany('App\Person', 'person_video')->withPivot('description');
}

然后,您应该可以从视图中访问{{$person->pivot->description}}