Laravel 5 3个模型之间的Elquent关系


Laravel 5 Eloquent relationships between 3 models

我有三种型号:

  1. 父亲
  2. 儿子
  3. 孙子

这种关系是显而易见的,一个父亲可以有很多儿子,他的儿子可以有很多孙子。

我想要实现的是找出一个父亲有多少孙子

我知道要想知道他有多少个儿子,我必须使用这个:

Father::find(1)->sons->count();

但我怎么能知道他有多少孙子呢?

如果不想循环遍历Sons,可以在Father模型上定义hasManyThrough关系,如下所示:

class Father
{
    public function grandsons()
    {
        return $this->hasManyThrough('GrandSon', 'Son');
    }
}

请查看此处以供参考:http://laravel.com/docs/5.1/eloquent-relationships#has-许多通过

除了@jsphpl的答案,您还可以继续链接,但使用方法而不是属性调用。

Father::find(1)->sons()->grandsons()->grandgrandsons()->count();

这是因为sons()返回的是关系而不是集合,所以grandsons()将继续从该sons()查询构建查询。grandgrandsons()也是如此。