Laravel 5 - 访问多对多关系的特定模型

时间:2015-03-20 07:30:15

标签: php eloquent laravel-5

所以我正在学习Laravel 5并且对很多关系都有疑问。我正在建立一个推特克隆,并希望允许创建推文和转发。我的数据库设置是(如透视表的laravel文档中所述)

users
  - id
  - name

tweets
  - id
  - content

tweet_user
  - tweet_id
  - user_id

我的UserTweet模型有适当的belongsToMany调用来连接这些关系。

来自 User.php

public function tweets() {
    return $this->belongsToMany('App\Tweet');
}

来自 Tweet.php

public function users() {
    return $this->belongsToMany('App\User');
}

最后,我的 tweet_user 数据透视表如下所示:

|--------------------|
| tweet_id | user_id |
|--------------------|
| 1        | 1       |
|--------------------|
| 1        | 2       |
|--------------------|

所以要显示我做的推文:

return view('tweets.index')->withTweets(App\Tweet::all())

并将其传递给我。在这一点上都很好,我的视图将显示2条推文(如上面的tweet_user数据透视表中所示)我的视图有:

@foreach($tweets as $tweet)
   {{ $tweet->user->name }} <-issue is here
   {{ $tweet->content }} <- all good here
@endforeach

因为我有这么多的设置,$tweet->user是所有拥有此推文的用户的数组/集合。如何在上面的循环中访问当前推文的实际用户模型(第一个循环的IE用户标识为1,第二个循环的用户标识为2)?我确定我遗漏了一些简单的东西,但我是否需要在推文/用户模型上使用其他一些访问者?我最初将此设置设置为hasMany / belongsTo关系,因此上面的循环工作正常。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我会将$this->user重命名为$this->users,如果它是多对多的,只是为了方便阅读。

然后像:

@foreach($tweets as $tweet)
   @foreach($tweet->users as $user)
      {{ $user->name }}
   @endforeach
   {{ $tweet->content }} <- all good here
@endforeach

这是因为您设置了多对多的关系。您可能希望按顺序或某种方式对其进行排序以标记原始用户。