2017-10-22 3 views
0

ich die folgenden Tabellen zu erhalten:Modell Methode Erstellen von Daten aus einem anderen Modell

Locations: 
id 
name 

areas: 
id 
name 

buildings: 
id 
name 

Reports: 
id 
content 
FK | building_id 

Wie kann ich eine Beziehung Methode in App \ Berichtsmodelldatei schreiben, die mir erlauben, den Bericht zu zeigen (Standort) < - von \ App \ Standortmodell.

ich mit diesem versucht, in Report-Modell:

public function location() 
    { 
     return Location::whereHas('areas', function($q){ 
      $q->whereHas('observations',function ($q){ 
       $q->where('observations.id',$this->id); 
      }); 
     })->get(); 
    } 

Aber es hat einen Fehler zurückgegeben:

Error (E_ERROR) Call to undefined Methode App \ Ort :: whereHas() (Ausblick:

+0

Basierend auf Ihren ** sehr begrenzt ** Detail, es scheint keine Beziehung zu sein zwischen 'locations', "Gebiete" oder "Gebäude". Nur 'reports' und' buildings' sind basierend auf Ihrem Datenbankschema verknüpft. Können Sie Ihre Frage mit den relevanten Informationen aktualisieren? – fubar

Antwort

1

Ihre Position Modell sollte sich Eloquent

use Illuminate\Database\Eloquent\Model; 

class Location extends Model 
{ 
    ... 

Es ist auch besser, Laravel-Beziehungen dafür zu verwenden. Sie werden mit einem Code wie folgt

public function location() 
{ 
    return $this->building->area->location; 
} 

Sie so etwas wie dieses müssen am Ende

class Report extends Model 
{ 
    public function location() 
    { 
     return $this->building->area->location; 
    } 

    public function building() 
    { 
     return $this->belongsTo(App\Building::class); 
    } 
} 

class Building extends Model 
{ 
    public function area() 
    { 
     return $this->belongsTo(App\Area::class); 
    } 
} 

class Area extends Model 
{ 
    public function location() 
    { 
     return $this->belongsTo(App\Location::class); 
    } 
} 
+0

Ich habe die genauen Methoden bereits in den Modelldateien erstellt, ich hatte gerade hinzugefügt öffentlichen Funktion Ort() { zurück $ this-> Gebäude-> Bereich-> Ort; } Fehler beim Anzeigen dieser Methode in der Datei view ==> {{$ o-> location-> name}}, ErrorException (E_ERROR) App \ Observation :: location muss eine Beziehungsinstanz zurückgeben. (View: – user2873860

+0

Diese Methode ist keine Laravel-Relation, da Sie 'ansistesTo',' hasMany' oder andere Beziehungskram nicht verwenden, also können Sie sie nicht verwenden wie '$ this-> location-> name' muss die Methode mit Klammern aufrufen '$ this-> location() -> name' – Lloople

+0

Ja, es funktioniert {{$ o-> location() -> name}} – user2873860

Verwandte Themen