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

Lesezeit: 6 Minuten

Benutzer-Avatar
Code-8

Sobald ich meine Laravel-App von MySQL auf pSQL umziehe. Ich bekam immer wieder diesen Fehler.

Der Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString() implementiert, “boolean” gegeben.

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


dd($förderung);

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

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

  • Meinten Sie postgresql? Psql ist der Name eines Kunden noh?

    – Mittelstumpf

    4. August 2016 um 15:49 Uhr

  • Versuchen Sie einfach, die Antwort in eine JSON-Zeichenfolge zu codieren return json_encode($promotion);

    – iniravpatel

    10. Juni 2019 um 10:27 Uhr

Benutzer-Avatar
Jared Eitnier

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

Ändern Sie es also in etwas wie:

return Response::json($promotion);

oder mein Favorit mit der Hilfsfunktion:

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

Wenn das Zurücksenden einer Antwort nicht funktioniert, kann es sich um ein Codierungsproblem handeln. Siehe diesen Artikel: Der Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString() implementiert, \”boolean\” gegeben.”

  • Bitte überprüfen Sie den Beitrag, auf den ich verwiesen habe, um festzustellen, ob Sie ein Problem mit der utf8-Codierung haben. Anscheinend ist dies für einige etwas üblich. Ein Codierungsproblem mit Daten könnte dies verursachen. Bei Ihrem Modell sieht alles normal aus, aber es könnte ein zugrunde liegendes Problem mit der Tabelle selbst sein.

    – Jared Etnier

    4. August 2016 um 15:10 Uhr


  • Stimmt etwas mit create_at / updated_at nicht? Aus irgendwelchen Gründen werfen deine Vorschläge immer noch das gleiche Error

    – Code-8

    4. August 2016 um 15:22 Uhr

  • Vielleicht können Sie versuchen, hinzuzufügen created_at und updated_at Parameter zu $hidden Array im Modell? Das war ein weiterer Vorschlag, der für einige funktionierte. Wenn das funktioniert, können wir es von dort aus eingrenzen.

    – Jared Etnier

    4. August 2016 um 15:58 Uhr


  • @JaredEitnier Es muss nicht sein Response Objekt. Sie können eine beliebige Zeichenfolge oder ein beliebiges Objekt zurückgeben, das die implementiert __toString() Methode (was Eloquent Models tun).

    – Patrikus

    4. August 2016 um 16:31 Uhr

Benutzer-Avatar
Patrikus

TL;DR

Komme gerade zurück response()->json($promotion) wird das Problem in dieser Frage nicht lösen. $promotion ist ein Eloquent-Objekt, das Laravel automatisch für die Antwort json_encodiert. Die JSON-Codierung schlägt aufgrund von fehl img -Eigenschaft, die eine PHP-Stream-Ressource ist und nicht codiert werden kann.

Einzelheiten

Was auch immer Sie von Ihrem Controller zurückgeben, Laravel wird versuchen, es in einen String umzuwandeln. Wenn Sie ein Objekt zurückgeben, wird das Objekt __toString() Magic-Methode wird aufgerufen, um die Konvertierung durchzuführen.

Deshalb, wenn Sie gerade return $promotion Von Ihrer Controller-Aktion wird Laravel anrufen __toString() darauf, um es in eine anzuzeigende Zeichenfolge umzuwandeln.

Auf der Model, __toString() Anrufe toJson()die das Ergebnis von zurückgibt json_encode. Deswegen, json_encode kehrt zurück falsewas bedeutet, dass ein Fehler auftritt.

Dein dd zeigt, dass Ihr img Attribut ist ein stream resource. json_encode kann a nicht verschlüsseln resource, also ist dies wahrscheinlich die Ursache des Fehlers. Sie sollten Ihre hinzufügen img Attribut zu $hidden Eigenschaft, um sie aus der zu entfernen json_encode.

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

    // rest of class
}

  • Hmm .. guter Anruf auf dem Bild, aber jetzt habe ich das. Call to undefined method stdClass::toJson() Ich hoffe, ich bin in der Nähe.

    – Code-8

    4. August 2016 um 16:36 Uhr

  • @ihue Ich würde vorschlagen, eine neue Frage mit aktualisiertem Code und Informationen für dieses neue Problem zu erstellen.

    – Patrikus

    4. August 2016 um 16:54 Uhr

  • Am Ende habe ich die entfernt img Spalte aus meiner Beförderungstabelle, und es funktioniert wieder. Ich denke, dass psql wirklich streng ist.

    – Code-8

    4. August 2016 um 17:29 Uhr

  • Ich könnte es nicht tun, ohne dass Sie mich in die richtige Richtung weisen. Vielen Dank. Du rettest mein Leben.. 🙂

    – Code-8

    4. August 2016 um 17:29 Uhr

  • sehr gute Prüfung .. also werde ich in einigen Fällen dd() anstelle von return verwenden

    – Merkur

    7. Februar 2017 um 16:22 Uhr

Ich habe dieses Problem, als ich einen Ajax-Aufruf verwendet habe, um Daten aus der Datenbank abzurufen. 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.

  • Gleiches Problem, dieses hat geholfen: stackoverflow.com/questions/19361282/…

    – Hähnchenchili

    3. Januar 2019 um 2:23 Uhr

Also lieber das ganze zurückschicken object Zuerst wickeln Sie es einfach ein json_encode und dann zurückgeben. Dadurch wird ein ordnungsgemäßes und gültiges Objekt zurückgegeben.

public function id($id){
    $promotion = Promotion::find($id);
    return json_encode($promotion);
}

Oder, für DB wird dies genau so sein,

public function id($id){
    $promotion = DB::table('promotions')->first();
    return json_encode($promotion);
}

Ich denke, es kann jemand anderem helfen.

Es wird nicht direkt in der Datei darauf hingewiesen, was den Fehler verursacht hat. Aber es wird tatsächlich in einer Controller-Datei ausgelöst. Dies geschieht, wenn ein Rückgabewert einer Methode, die in einer Controller-Datei definiert ist, auf einen booleschen Wert gesetzt wird. Es darf nicht auf einen booleschen Typ gesetzt werden, aber andererseits muss es gesetzt oder mit einem Wert eines String-Typs versehen werden. Es kann wie folgt gezeigt werden:

public function saveFormSummary(Request $request) {
      ... 
      $status = true;
      return $status;
}

Wenn der Rückgabewert eines booleschen Typs oben in einer Methode gegeben ist, um das Problem lösen zu können, um den angegebenen Fehler zu behandeln. Ändern Sie einfach den Typ des Rückgabewerts in einen Zeichenfolgentyp

folgendermaßen :

public function saveFormSummary(Request $request) {
      ... 
      $status = "true";
      return $status;
}

Benutzer-Avatar
marc_s

Sie können verwenden json_decode(Your variable Name):

json_decode($result)

Ich habe einen Wert von Model.where erhalten, in dem eine Spalte auf diese Weise einen Wert hat

{"dayList":[
            {"day":[1,2,3,4],"time":[{"in_time":"10:00"},{"late_time":"15:00"},{"out_time":"16:15"}]
             },
             {"day":[5,6,7],"time":[{"in_time":"10:00"},{"late_time":"15:00"},{"out_time":"16:15"}]}
           ]
}

Greifen Sie also auf dieses Werteformularmodell zu. Sie müssen diesen Code verwenden.

$dayTimeListObject = json_decode($settingAttendance->bio_attendance_day_time,1);

 foreach ( $dayTimeListObject['dayList'] as $dayListArr)
 {
     foreach ( $dayListArr['day'] as $dayIndex)
     {
         if( $dayIndex == Date('w',strtotime('2020-02-11')))
         {
             $dayTimeList= $dayListArr['time'];
         }
     }
 }

 return $dayTimeList[2]['out_time'] ;

Sie können auch definieren Kaste in Ihrer Modelldatei.

 protected $casts = [
    'your-column-name' => 'json'
  ];

danach ist diese Zeile nicht mehr erforderlich.

$dayTimeListObject = json_decode($settingAttendance->bio_attendance_day_time,1);

Sie können direkt auf diesen Code zugreifen.

$settingAttendance->bio_attendance_day_time

1228680cookie-checkDer Antwortinhalt muss eine Zeichenfolge oder ein Objekt sein, das __toString() implementiert, “boolean”, das nach dem Verschieben nach psql angegeben wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy