论坛的laravel模型关系

时间:2014-04-18 08:44:08

标签: php orm laravel eloquent

我目前正在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');
     }
}

使用这种方法,我可以得到一个特定的线程,以及属于它的帖子。但是我无法抓住在帖子中发布帖子的用户。

我希望我的问题对你来说足够明确。任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:1)

为清楚起见,我建议你将你的关系命名为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/