Laravel雄辩的自我关系查询可返回嵌套的JSON

时间:2018-09-21 18:44:15

标签: json laravel api eloquent

我有一个表,该表具有一对一的自我关系来表示层次结构。下面是表格的图表和一些示例数据:

Locations Table Example Data

这是关系的位置模型代码:

class Location extends Model
{
    public function location()
    {
        return $this->hasOne('App\Location');
    }
}

我想查询Locations表并发送JSON响应,如下面的示例,但我不确定如何进行查询:

{
    "id": 1,
    "name": "Country",
    "location_id": null
    "location": {
        "id": 2,
        "name": "State",
        "location_id": 1
        "location": {
            "id": 3,
            "name": "City",
            "location_id": 2
        }
    }
}

1 个答案:

答案 0 :(得分:1)

要始终渴望加载位置关系而不必担心深度,可以将$ with属性添加到位置模型中:

protected $with = ['location'];

现在,当您返回一个位置时,它将加载所有嵌套的子位置:

return App\Location::find(1);

如果从控制器方法返回,Laravel还可以将其作为JSON返回。

正如Kyslik指出的那样,

提出了一个潜在的N + 1问题,潜在的深度以及查询大小,并且在决定在生产环境中使用诸如此类的解决方案时应考虑环境的其余部分,例如位置,这可能不是问题,非常值得简单