我目前正在Laravel建立一个论坛,只是为了学习,但我无法让我的关系正常工作。
我有一个线程、帖子和用户模型。
我试过以下几种:
class User {
public function thread() {
return $this->hasMany('Thread');
}
public function post() {
return $this->hasManyThrough('Thread', 'Post');
}
}
class Thread {
public function post() {
return $this->hasMany('Post');
}
public function user() {
return $this->belongsTo('User');
}
}
class Post {
public function thread() {
return $this->belongsTo('Thread');
}
public function user() {
return $this->belongsTo('User');
}
}
通过这种方法,我可以获得一个特定的线程,以及其中的帖子。但我无法获取在线程中发布帖子的用户。
我希望我的问题对你来说足够清楚。任何帮助都将不胜感激。
为了清楚起见,我建议您将您的关系命名为单数形式的hasOne/belongsTo,复数形式的belongsToMany/hasMany
在用户和线程上,它将是:
public function posts() ...
现在,这是错误的顺序:
class User {
public function posts() {
// return $this->hasManyThrough('Thread', 'Post'); // wrong, change to:
return $this->hasManyThrough('Post', 'Thread');
}
}
除此之外,你的关系看起来很好,所以你应该能够做到这一点:
$thread = Thread::with('posts.user')->find($threadId); // eager load relations
$thread->posts; // Eloquent Collection of Post models
foreach ($thread->posts as $post)
{
$post->user; // author's User model
}
顺便说一句,你可以随时查看Laravel.io的来源:https://github.com/LaravelIO/laravel.io/