2016-08-01 21 views
0

dies:Laravel wirft Fehler bei der Rückkehr -> ersten() in Controller

public function show($id) 
    { 
     return DB::table('apps')->where('id', $id)->first();//->get(); 
    } 

einen Fehler zurück: UnexpectedValueException in Response.php line 399: The Response content must be a string or object implementing __toString(), "object" given.

dies keinen Fehler zurück (aber ich kann es nicht benutzen, da ich brauche ein Objekt nicht Array):

public function show($id) 
    { 
     return DB::table('apps')->where('id', $id)->get(); 
    } 

was ist los?

Dank

+0

Haben Sie ein Modell für "Apps" eingerichtet? Sie sollten ein Modell erstellen und dann 'AppModel :: find ($ id)' – jfadich

+0

haben Sie versucht, diese Rückgabe DB :: Tabelle ('Apps') -> wo ('ID', $ ID) -> zuerst; – owaishanif786

+0

@ owaishanif786 Das wird nicht funktionieren, 'first' ist eine Methode, keine Eigenschaft und die DB versucht nicht, sie magisch zu nennen. Das Problem hierbei ist, dass die DB-Fassade ein Roh-PHP-Objekt zurückgibt und Laravel erwartet, dass entweder eine Zeichenkette, ein Array/eine Sammlung, ein Antwortobjekt oder ein redegewandtes Modell von einem Controller und nicht von einem Rohobjekt zurückgegeben wird. – jfadich

Antwort

0

Die DB Fassade wird ein rohes PHP-Objekt zurück. Wenn Daten von einem Controller in Laravel zurückgegeben werden, sollte es sich um eine Zeichenfolge, ein Array, ein eloquentes Modell oder ein Antwortobjekt (dh eine Ansicht) handeln. Da Sie ein unbearbeitetes Objekt zurückgeben, versucht Laravel, es in eine Zeichenfolge umzuwandeln, die die Ursache Ihres Problems ist.

Der beste Weg, dieses Problem zu beheben

public function show($id) 
{ 
    return AppModel::where('id', $id)->firstOrFail(); 
} 

Hinweis ein Model anstelle der DB Fassade nutzen würde: Ich bin mit firstOrFail() hier, weil, wenn eine App nicht existiert, Laravel mit automatisch abbrechen wird a 404.

Durch die Rückgabe eines eloquenten Modells weiß Laravel, dass es automatisch in JSON umgewandelt wird.

Wenn Sie nicht eloquent verwenden möchten, dann wenden Sie das Objekt auf ein Array.

Laravel nimmt dieses Array und Fall für Sie in der Antwort auf JSON.

+0

Ich bekomme den Fehler: 'Call to undefined Methode Illuminate \ Database \ Query \ Builder :: firstOrFail()' BTW, kann ich AppModel nicht verwenden, weil ich Code-Wiederverwendung zwischen den Controllern tun möchte, so brauche ich etwas dynamisches – SexyMF

+0

@SexyMF seltsam. Funktioniert es nur mit 'first()' – jfadich

+0

'return DB :: table ('apps') -> wo ('id', $ id) -> first();' wird 'UnexpectedValueException in Response.php Zeile 399 zurückgeben : Der Response-Inhalt muss eine Zeichenfolge oder ein Objekt sein, die __toString(), "object" übergeben. – SexyMF