如何使用 eloquent 提取第二个 child table 数据

How to pull second child table data using eloquent

我有三个表,它们是这样连接的。

packages(parent) -> routes(child) -> items(grandchild)

我必须使用 laravel eloquent 找到所有带有包 ID 的项目我知道这可以通过使用 join 来完成,但是如果使用 eloquent 我们会做什么

+---------+         +-----------------------+     +---------------------+
|packages |         |         routes        |     |         items       |
+---------+         +-----------------------+     +---------------------+
|id | name|         |id | package_id  |name |     |id | route_id  |name |
| 1 | P1  |         | 1 |       1     | R1  |     | 1 |     1     | I1  |
| 2 | P2  |   ->    | 2 |       1     | R2  | ->  | 2 |     1     | I2  |
| 3 | P3  |         | 3 |       2     | R3  |     | 3 |     2     | I3  |
| 4 | P4  |         | 4 |       2     | R4  |     | 4 |     1     | I4  |
| 5 | P5  |         | 5 |       3     | R5  |     | 5 |     3     | I5  |
+---------+         +-----------------------+     +---------------------+

包装型号

在这里我必须实现这个

class Package extends Model
{
  public function items(){
    return $this->...;
  }
}

结果(属于package_id = 1 的项目)

+-----------------------+
|id | route_id  | name  |
+-----------------------+
| 1 |     1     |   I1  |
| 2 |     1     |   I2  |
| 3 |     2     |   I3  |
| 4 |     1     |   I4  |
+-----------------------+

有什么方法可以使用 eloquent

提前致谢

你需要这样做:

class Package extends Model
{
    public function items()
    {
        return $this->hasManyThrough('App\Item', 'App\Route',
                                     'package_id', 'route_id', 'id');
    }
}