2016-06-29 12 views
0

Betrachtet sie ein Modell Mitarbeiter und ein Modell ProjektLaravel/Lumen -, die eine Beziehung mit Parametern

Die Mitarbeiter Tabelle eine Eigenschaft Typen hat, den folgenden Wert „1“ zugeordnet werden kann, "2", "3" usw.

Projekt hasMany Mitarbeiter

public function programmers() { 
    return $this->hasMany('App\Employee') 
     ->where('type', '1'); 
} // hasMany programmers 

public function testers() { 
    return $this->hasMany('App\Employee') 
     ->where('type', '2'); 
} // hasMany testers 

public function managers() { 
    return $this->hasMany('App\Employee') 
     ->where('type', '3'); 
} // hasMany managers 

Anstelle dieser Beziehungen, ich würde nur eine haben wollen:

public function employees($type_id) { 
    return $this->hasMany('App\Employee') 
     ->where('type', $type_id); 
} // hasMany employees 

Es würde so funktionieren:

$app->get('/employee', function() { 
    $project = App\Employee::find(1); 
    return $project->employees("1"); 
}); 

Ich bin jedoch die folgende Ausnahme erhalten:

ErrorException in Response.php line 402: 
Object of class Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string 

Antwort

1

Blick auf den Inhalt der Fehlermeldung:

Error in Response.php Linie 402: Objekt der Klasse Illuminate \ Database \ Eloquent \ Relations \ HasMany nicht zu String umgewandelt werden konnte

Die Fehler tritt in der Antwortklasse auf. Der Grund dieser Fehler nach oben kommt, ist, weil Sie eine Beziehung in Ihrer Route Definition eher als eine Antwort sind Rückkehr:

$app->get('/employee', function() { 
    $project = App\Employee::find(1); 
    return $project->employees("1"); 
}); 

Ein Beziehungsobjekt kann nicht in einen String umgewandelt werden und damit die Response-Klasse weiß nicht, was ich damit machen soll. Wenn Sie das Ergebnis Ihrer Beziehungsabfrage im Browser untersuchen möchten, müssen Sie valid response10 zurückgeben.

Versuchen Sie Ihre Route so etwas wie dies zu ändern:

$app->get('/employee', function() { 
    $project = App\Employee::find(1); 
    return response()->json($project->employees("1")->get()); 
}); 

Dies wird geben die Ergebnisse der Abfrage zu JSON. Beachten Sie auch die Verwendung von get(). Dadurch wird sichergestellt, dass die Beziehungsabfrage tatsächlich ausgeführt wird.

+0

Danke, auch für die ausführliche Erklärung –

Verwandte Themen