Eloquent:基于表关系

时间:2016-05-16 08:14:53

标签: php mysql laravel eloquent

我不知道如何使用Laravel Eloquent来解决这个问题。所以,我在这里发布了我的问题。
我有这样的表:

+-------------+  +------------------------+
| POSTS       |  | COMMENTS               |
|-------------|  |------------------------|
| id  | title |  | id | text    | post_id |
|-----+-------|  |----+-------------------|
| 1   | A     |  | 1  | Lorem   | 1       |
| 2   | B     |  | 2  | Ipsum   | 1       |
+-------------+  | 3  | Dolor   | 1       |
                 | 4  | Sit     | 1       |
                 | 5  | Amet    | 2       |
                 | 6  | Lorem 2 | 2       |
                 +------------------------+

我目前有2个型号,邮政模型

class Post extends Model
{
    public function comment() {
        $this->hasMany('App\Comment');
    }
}

和评论模型

class Comment extends Model
{
    public function comment() {
        $this->belongsTo('App\Post');
    }
}

问题是,我应该在控制器上做什么,这样我才能让每个帖子都有评论计数结果?或者简单地说,就像下表一样。

+-----------------------------------------+
| COMMENT COUNT                           |
|-----------------------------------------|
| posts.id | count(comments.post_id) AS n |
|----------+------------------------------|
| 1        | 4                            |
| 2        | 2                            |
+-----------------------------------------+

感谢。

1 个答案:

答案 0 :(得分:0)

你忘了归还关系。因此,模型应定义为:

class Post extends Model
{
    public function comments()
    {
        return $this->hasMany('App\Comment');
    }
}

class Comment extends Model
{
    public function post()
    {
        return $this->belongsTo('App\Post');
    }
}

现在您可以将帖子评论计为:

echo $post->comments()->count();

甚至

echo $post->comments->count();

这两种方法之间的区别在于最新的方法是获取和缓存帖子评论。