Der Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString () implementiert, "boolean", das nach dem Verschieben nach psql angegeben wird
Sobald ich meine Laravel App von MySQL auf pSQL verschiebe. Ich habe diesen Fehler immer wieder bekommen.
Der Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString () implementiert, wobei "boolean" angegeben ist.
Ich habe eine API, die meine Werbung zurückgeben soll
http: // localhost: 8888 / api /promotion / 1
public function id($id){
$promotion = Promotion::find($id);
dd($promotion); //I got something here
return $promotion;
}
Früher hat es meine Promotion zurückgegeben, jetzt wird ein Fehler zurückgegeben.
dd ($ Promotion);
I got
Promotion {#410 ▼
#table: "promotions"
#connection: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:16 [▼
"id" => 1
"cpe_mac" => "000D6721A5EE"
"name" => "qwrqwer"
"type" => "img_path"
"status" => "Active"
"heading_text" => "qwerq"
"body_text" => "werqwerqw"
"img" => stream resource @244 ▶}
"img_path" => "/images/promotion/1/promotion.png"
"video_url" => ""
"video_path" => ""
"account_id" => 1001
"img_url" => ""
"footer_text" => "qwerqwerre"
"created_at" => "2016-08-04 10:53:57"
"updated_at" => "2016-08-04 10:53:59"
]
#original: array:16 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#fillable: []
#guarded: array:1 [▶]
#dates: []
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
}
Inhalt
__ Hinweise / Vorschläge dazu sind eine große Hilfe!
TL; DR
Nur eine Rückkehr response()->json($promotion)
löst das Problem in dieser Frage nicht. $promotion
ist ein eloquentes Objekt, das Laravel automatisch json_encode für die Antwort gibt. Die JSON-Codierung schlägt aufgrund der img
Eigenschaft fehl , bei der es sich um eine PHP-Stream-Ressource handelt, und kann nicht codiert werden.
Einzelheiten
Was auch immer Sie von Ihrem Controller zurückgeben, Laravel wird versuchen, in einen String zu konvertieren. Wenn Sie ein Objekt zurückgeben, wird die __toString()
magische Methode des Objekts aufgerufen, um die Konvertierung durchzuführen.
Wenn Sie also nur return $promotion
Ihre Controller-Aktion ausführen, wird Laravel sie aufrufen __toString()
, um sie in eine anzuzeigende Zeichenfolge zu konvertieren.
Auf dem Model
, __toString()
Aufrufe toJson()
, die das Ergebnis von zurückgeben json_encode
. Daher json_encode
wird zurückgegeben false
, was bedeutet, dass ein Fehler auftritt.
Ihr dd
zeigt, dass Ihr img
Attribut a ist stream resource
. json_encode
kann a nicht codieren resource
, daher verursacht dies wahrscheinlich den Fehler. Sie sollten Ihr img
Attribut zur $hidden
Eigenschaft hinzufügen , um es aus dem zu entfernen json_encode
.
class Promotion extends Model
{
protected $hidden = ['img'];
// rest of class
}