wake-up-neo.com

Der Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString () implementiert. Der Wert "boolean" wird nach dem Verschieben nach psql angegeben

Sobald ich meine Laravel App von MySQL nach pSQL verschiebe, erhalte ich immer wieder diesen Fehler.

Der Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString () implementiert, "boolean" angegeben.

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 gab es meine Werbung zurück, jetzt gab es einen Fehler zurück.


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

enter image description here

__ Irgendwelche Hinweise/Vorschläge dazu werden eine große Hilfe sein!

22
kyo

TL; DR

Nur die Rückgabe von response()->json($promotion) löst das Problem in dieser Frage nicht. $promotion Ist ein eloquentes Objekt, das Laravel automatisch für die Antwort json_encode. Die JSON-Codierung schlägt aufgrund der Eigenschaft img fehl, die eine PHP -Stream-Ressource ist und nicht codiert werden kann.

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 magische Methode __toString() des Objekts aufgerufen, um die Konvertierung durchzuführen.

Wenn Sie also nur return $promotion Von Ihrer Controller-Aktion ausführen, ruft Laravel __toString() auf, um es in einen anzuzeigenden String zu konvertieren.

Bei Model ruft __toString()toJson() auf, das das Ergebnis von json_encode Zurückgibt. Daher gibt json_encodefalse zurück, was bedeutet, dass ein Fehler auftritt.

Ihr dd zeigt an, dass Ihr img Attribut ein stream resource Ist. json_encode Kann kein resource codieren, was wahrscheinlich den Fehler verursacht. Sie sollten Ihr img -Attribut der Eigenschaft $hidden Hinzufügen, um es aus der Eigenschaft json_encode Zu entfernen.

class Promotion extends Model
{
    protected $hidden = ['img'];

    // rest of class
}
16
patricus

Ihre Antwort muss eine Art Response Objekt zurückgeben. Sie können ein Objekt nicht einfach zurückgeben.

Also ändere es in etwas wie:

return Response::json($promotion);

oder mein Favorit mit der Hilfsfunktion:

return response()->json($promotion);

Wenn die Rückgabe einer Antwort nicht funktioniert, liegt möglicherweise ein Codierungsproblem vor. Siehe diesen Artikel: Der Inhalt der Antwort muss eine Zeichenfolge oder ein Objekt sein, das __toString () implementiert, "boolean" angegeben.

22
Jared Eitnier

Ich habe dieses Problem erhalten, als ich mit einem Ajax-Aufruf Daten aus der Datenbank abgerufen habe. Als der Controller das Array zurückgab, konvertierte er es in einen Booleschen Wert. Das Problem war, dass ich "ungültige Zeichen" wie ú (u mit Akzent) hatte.

3
Diego Alves