我有三种型号:
- 父亲
- 儿子
- 孙子
这种关系是显而易见的,一个父亲可以有很多儿子,他的儿子可以有很多孙子。
我想要实现的是找出一个父亲有多少孙子 。
我知道要想知道他有多少个儿子,我必须使用这个:
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()
也是如此。