web-dev-qa-db-ja.com

応答の内容は、psqlへの移動後に指定された__toString()、 "boolean"を実装する文字列またはオブジェクトである必要があります

LaravelアプリをMySQLからpSQLに移動するとすぐに。このエラーが引き続き発生します。

応答の内容は、__ toString()、 "boolean"を実装する文字列またはオブジェクトでなければなりません。

プロモーションを返すためのAPIを持っています

http:// localhost:8888/api/promotion/1

public function id($id){
    $promotion = Promotion::find($id);
    dd($promotion); //I got something here
    return $promotion;
}

以前はプロモーションを返していましたが、現在はエラーを返します。


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
}

コンテンツ

enter image description here

__これに関するヒントや提案は大いに役立ちます!

22
kyo

TL; DR

response()->json($promotion)を返すだけでは、この質問の問題は解決しません。 $promotionはEloquentオブジェクトであり、Laravelは応答に対して自動的にjson_encodeします。 PHPストリームリソースであり、エンコードできないimgプロパティのため、jsonエンコードは失敗しています。

詳細

コントローラーから返されるものは何でも、Laravelは文字列への変換を試みます。オブジェクトを返すと、オブジェクトの__toString()マジックメソッドが呼び出されて変換が行われます。

したがって、コントローラーアクションからreturn $promotionだけを実行すると、Laravelが__toString()を呼び出して、表示する文字列に変換します。

Modelで、__toString()json_encodeの結果を返すtoJson()を呼び出します。したがって、json_encodefalseを返します。これは、エラーが発生していることを意味します。

ddは、img属性がstream resourceであることを示しています。 json_encoderesourceをエンコードできないため、これがおそらく失敗の原因です。 img属性を$hiddenプロパティに追加して、json_encodeから削除する必要があります。

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

    // rest of class
}
16
patricus

応答は、何らかの種類のResponseオブジェクトを返す必要があります。オブジェクトを返すことはできません。

次のように変更します。

return Response::json($promotion);

またはヘルパー関数を使用して私のお気に入り:

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

応答を返せない場合は、何らかのエンコードの問題である可能性があります。この記事を参照してください: 応答コンテンツは、__ toString()、\ "boolean \"を実装する文字列またはオブジェクトでなければなりません。 "

22
Jared Eitnier

データベースからデータを取得するためにajax呼び出しを使用したときにこの問題が発生しました。コントローラが配列を返したとき、それをブール値に変換しました。問題は、ú(アクセント付きu)のような「無効な文字」があったことです。

3
Diego Alves