Php 论坛的laravel模型关系

Php 论坛的laravel模型关系,php,orm,laravel,eloquent,Php,Orm,Laravel,Eloquent,我现在正在拉维尔开一个论坛,只是为了学习,但我不能让我的关系很好地运作 我有一个线程、帖子和用户模型 我尝试了以下方法: class User { public function thread() { return $this->hasMany('Thread'); } public function post() { return $this->hasManyThrough('Thread', 'Post'); }

我现在正在拉维尔开一个论坛,只是为了学习,但我不能让我的关系很好地运作

我有一个线程、帖子和用户模型

我尝试了以下方法:

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来源:

非常感谢您的回复!现在好一点了。只有一件事我忘了具体说明。我有一个
线程
用户
帖子
表。在
posts
表中,我只把用户id放在那里,我想从
users
表中获取与该用户id对应的用户名。准确地说,然后在我编写的循环中,您可以访问用户名,如$post->user->username;当我尝试这样做时,我得到一个“尝试获取非对象的属性”错误。当我像$post->user()->username这样访问它时,我会得到“未定义的属性:illumb\Database\elount\Relations\BelongsTo::$username”。没关系,我发现了错误。我没有指定要在我的Post模型中查找的本地密钥
public function userr(){return$this->belongsTo('User','User');}
User\u id列被命名为'User'。这就是问题所在,因此数据库中没有相关用户,或者该帖子根本没有用户id值,$post->user返回null。用户PK是否也被称为“id”?