加入3个数据库表以获得laravel

时间:2016-04-05 23:56:17

标签: mysql json laravel-4 jsonresult

我有3个数据库表:国家,城市和餐馆

Country     {id,name}
City        {id,name,country_id}
Restaurant  {id,name,city_id}

如何通过它的城市及其餐馆检索国家/地区信息?

我正在使用此代码来获取拥有该城市的国家/地区: 请注意,我在表格之间建立了所有关系:

Country {hasMany('City')}
City    {hasMany('Hotel')}
City    {belongsTo('Country')}
Hotel   {belongsTo('City')}

$x = Country::with('city')->get();
return Response::json($x,200,[],JSON_PRETTY_PRINT);

结果:

[
    {
        "id": 1,
        "name": "Spain",
        "city": [
            {
                "id": 1,
                "name": "Madrid",
                "country_id": 1
            },
            {
                "id": 2,
                "name": "Barcelona",
                "country_id": 1
            }
        ]
    },
    {
        "id": 2,
        "name": "Italy",
        "city": []
    }
]

我该怎样做才能让每个城市的餐厅都采用相同的JSON响应?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用hasManyThrough()访问远程关系: https://laravel.com/docs/5.1/eloquent-relationships#has-many-through

// App\Country
public function hotels() {
    $this->hasManyThrough('App\Hotel', 'App\City');
}

然后您可以像这样获取它:

$x = Country::with('city')->with('hotels')->get();