如何使用eloquent提取第二个子表数据

时间:2017-05-20 16:13:52

标签: laravel laravel-5 eloquent laravel-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  |
+---------+         +-----------------------+     +---------------------+

Pacakge模型

这里我必须得到这个

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  |
+-----------------------+

有没有办法使用雄辩的

来做到这一点

提前致谢

1 个答案:

答案 0 :(得分:1)

你需要这样做:

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