所以我正在学习Laravel 5并且对很多关系都有疑问。我正在建立一个推特克隆,并希望允许创建推文和转发。我的数据库设置是(如透视表的laravel文档中所述)
users
- id
- name
tweets
- id
- content
tweet_user
- tweet_id
- user_id
我的User
和Tweet
模型有适当的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
关系,因此上面的循环工作正常。谢谢你的帮助!
答案 0 :(得分:0)
我会将$this->user
重命名为$this->users
,如果它是多对多的,只是为了方便阅读。
然后像:
@foreach($tweets as $tweet)
@foreach($tweet->users as $user)
{{ $user->name }}
@endforeach
{{ $tweet->content }} <- all good here
@endforeach
这是因为您设置了多对多的关系。您可能希望按顺序或某种方式对其进行排序以标记原始用户。