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


cyber8200:

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

Geben Sie hier die Bildbeschreibung ein

__ Hinweise / Vorschläge dazu sind eine große Hilfe!

patricus:

TL; DR

Nur eine Rückkehr response()->json($promotion)löst das Problem in dieser Frage nicht. $promotionist ein eloquentes Objekt, das Laravel automatisch json_encode für die Antwort gibt. Die JSON-Codierung schlägt aufgrund der imgEigenschaft 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 $promotionIhre 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_encodewird zurückgegeben false, was bedeutet, dass ein Fehler auftritt.

Ihr ddzeigt, dass Ihr imgAttribut a ist stream resource. json_encodekann a nicht codieren resource, daher verursacht dies wahrscheinlich den Fehler. Sie sollten Ihr imgAttribut zur $hiddenEigenschaft hinzufügen , um es aus dem zu entfernen json_encode.

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

    // rest of class
}

Verwandte Artikel