我有一个属于其他模型'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的新手而且我不明白为什么我不能那样打电话。有人可以解释一下吗?
答案 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;