2016-08-09 216 views
0

Ich habe ein Modell "model1", die zu einem anderen Modell 'model2' gehören und sie sind eins zu viele Beziehung. Lassen Sie uns sagen model2 hat zwei Funktion,Laravel Eloquent Eine zu viele Relation Funktion nicht gefunden

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

Modell1 eine Funktion hat,

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

Wenn ich rufe Abfrage in der Steuerung wie folgt,

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

Es funktioniert aber,

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

Zeigt folgenden Fehler,

Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: model3()

Wie ich bin neu in Laravel und ich nicht, warum ich nicht so genannt werden. Kann mir jemand das erklären?

UPDATE ::

Szenario ist:

Modell 1 = Raum

Modell 2 = Hotel

Modell 3 = Stadt

Zimmer gehört das Hotel,

Das Hotel verfügt über viele Zimmer,

Hotel Stadt gehört,

Stadt viele Hotels,

Wenn ich Abfrage für Zimmer, ich möchte, Hotel und Stadt aufzunehmen.

Ich habe ein Modell "Room", die zu anderen Modell "Hotel" gehören und sie sind eins zu viele Beziehung. Lassen Sie uns sagen, "Hotel" hat zwei Funktion,

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

"Room" hat eine Funktion,

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

Wenn ich rufe Abfrage in der Steuerung wie folgt,

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

Es funktioniert aber,

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

Zeigt folgenden Fehler,

Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: Stadt()

Wie ich bin neu in Laravel und ich nicht, warum ich nicht so genannt werden. Kann mir jemand das erklären?

+0

Sie verpassen '-> get()' am Ende Ihrer Aussage. – aynber

+0

Sorry, ich habe gerade hinzugefügt. – user3789191

+0

Ich habe einige weitere Details zu der Frage hinzugefügt können Sie mir bitte erklären, wie kann ich lösen? – user3789191

Antwort

-1

Da Modell 1 hat keine Beziehung zu Modell 3, aber Modell 2 tut.

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

Und Sie tun können, wie

$model1->model2->model3->access_property_x 

oder

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

Denken Sie daran, dass das OP model3 _via_ model2 mit einem verschachtelten 'with' (dh' model1 :: with ('model2. model3 '); '). –

+0

Das ist eigentlich eine akzeptierte Methode: https://laravel.com/docs/5.2/eloquent-relationships#eager-loading siehe "Nested Eager Loading" – aynber

+0

Ich habe etwas mehr Details zu der Frage hinzugefügt können Sie mir bitte erklären, wie ich kann lösen? – user3789191