Laravel Eloquent一对多关系功能未找到

时间:2016-08-09 15:35:41

标签: php laravel laravel-5 eloquent

我有一个属于其他模型'model2'的模型“model1”,它们是一对多的关系。假设model2有两个函数,

function model1()
{
    return $this->hasMany('App\model1');
}
function model3()
{
    return $this->belongsTo('App\model3');
}

Model1有一个函数,

function model2()
{
    $this->belongsTo('App\model2');
}

当我在控制器中调用查询时,如下所示

function index()
{
    $query=model1::with('model2')->get();
}

它可以工作但是,

function index()
{
    $query=model1::with('model2.model3')->get();
}

显示以下错误

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: model3()

因为我是laravel的新手而且我不明白为什么我不能那样打电话。有人可以解释一下吗?

UPDATE ::

情景是:

模型1 =房间

模特2 =酒店

模型3 =城市

客房属于酒店,

酒店有很多房间,

酒店属于City,

城市有很多酒店,

当我查询房间时,我想包括酒店和城市。

我有一个模型“房间”属于其他模型'酒店',他们是一对多的关系。假设“酒店”有两个功能,

function Room()
{
    return $this->hasMany('App\Room');
}
function City()
{
    return $this->belongsTo('App\City');
}

“房间”有一个功能,

function Hotel()
{
    $this->belongsTo('App\Hotel');
}

当我在控制器中调用查询时,如下所示

function index()
{
    $query=Room::with('Hotel')->get();
}

它可以工作但是,

function index()
{
    $query=Room::with('Hotel.City')->get();
}

显示以下错误

  

调用未定义的方法Illuminate \ Database \ Query \ Builder :: City()

因为我是laravel的新手而且我不明白为什么我不能那样打电话。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:-1)

因为模型1与模型3无关,但模型2与模型3无关。

function index()
{
    $query=model1::with('model2');
}

你可以这样做

$model1->model2->model3->access_property_x

$model1->model2()->where('something', '=', 'something else')->model3->access_propert_x;