2016-08-09 4 views
0

У меня есть модель «model1», которая относится к другой модели «model2», и они являются отношениями от одного до многих. Скажем model2 имеет две функции,Laravel Eloquent One to Many функция отношения не найден

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(); 
} 

Показаны следующие ошибки,

Призыв к неопределенным метод Осветите \ Database \ Query \ Builder :: model3()

Как я новичок в Laravel, и я не понимаю, почему я не могу назвать, как это. Может ли кто-нибудь объяснить мне?

UPDATE ::

Сценарий:

Модель 1 = Номер

Model 2 = отель

Model 3 = Город

Номера принадлежит гостиница

Отель имеет множество комнат,

Отель находится в городе,

Город имеет множество отелей,

Когда я запрашиваю для помещений, я хотел бы включить отель и город.

У меня есть модель «Комната», которая принадлежит к другой модели «Отель», и это отношения друг к другу. Скажем, "Отель" имеет две функции,

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(); 
} 

Это работает, но,

Показаны следующие ошибки,

Призыв к неопределенным метод Осветите \ Database \ Query \ Builder :: Город()

Как я новичок в Laravel, и я не понимаю, почему я не могу назвать, как это. Может ли кто-нибудь объяснить мне?

+0

Вы упускаете '-> получить()' в конце вашего заявления. – aynber

+0

Извините, я только что добавил. – user3789191

+0

Я добавил несколько подробностей на вопрос, не могли бы вы объяснить мне, как я могу решить? – user3789191

ответ

-1

Потому что модель 1 не имеет отношения к модели 3, но модель 2 делает.

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

И вы могли бы сделать, как

$model1->model2->model3->access_property_x 

или

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

Имейте в виду, что OP извлекал модель 3 _via_ model2 с вложенным' with' (т.е. 'model1 :: with ('model2. model3'); '). –

+0

Это на самом деле принятый метод: https://laravel.com/docs/5.2/eloquent-relationships#eager-loading см. «Вложенная нетерпеливая загрузка» – aynber

+0

Я добавил несколько подробностей на вопрос, не могли бы вы объяснить мне, как я могу решать? – user3789191

Смежные вопросы