Содержимое ответа должно быть строкой или объектом, реализующим __toString(), "boolean", заданный после перехода на psql

Как только я переведу свое приложение 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;
}

Он использовал, чтобы вернуть мою рекламу, теперь она возвращает ошибку.


дд ($ продвижение);

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
}

Содержание

введите описание изображения здесь

__ Любые подсказки/предложения по этому поводу будут огромной помощью!

Ответ 1

Что бы вы не вернули из своего контроллера, Laravel попытается преобразовать в строку. Когда вы возвращаете объект, магический метод объекта __toString() будет вызван для выполнения преобразования.

Поэтому, когда вы просто return $promotion из действия вашего контроллера, Laravel собирается вызвать для него __toString() чтобы преобразовать его в строку для отображения.

В Model __toString() вызывает toJson(), который возвращает результат json_encode. Поэтому json_encode возвращает false, что означает, что он сталкивается с ошибкой.

Ваш dd показывает, что ваш атрибут img является stream resource. json_encode не может кодировать resource, так что это, вероятно, вызывает сбой. Вы должны добавить свой атрибут img в свойство $hidden чтобы удалить его из json_encode.

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

    // rest of class
}

Ответ 2

Ваш ответ должен вернуть какой-то объект Response. Вы не можете просто вернуть объект.

Так измените его на что-то вроде:

return Response::json($promotion);

или мой любимый, используя вспомогательную функцию:

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

Если возврат ответа не работает, это может быть какая-то проблема с кодировкой. См. Эту статью: Содержимое ответа должно быть строкой или объектом, реализующим __toString(),\ "boolean\" . Дано "

Ответ 3

У меня возникла эта проблема, когда я использовал вызов ajax для извлечения данных из базы данных. Когда контроллер вернул массив, он преобразовал его в логическое. Проблема заключалась в том, что у меня были "недопустимые символы", такие как ú (u с акцентом).

Ответ 4

Это указывается не непосредственно в файле, который вызвал ошибку. Но это на самом деле запускается в файле контроллера. Это происходит, когда возвращаемое значение из метода, определенного внутри в файле контроллера, устанавливается на логическое значение. Он не должен быть установлен для логического типа, но, с другой стороны, он должен быть установлен или иметь значение типа строки. Это можно показать следующим образом:

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

Учитывая возвращаемое значение логического типа выше в методе, чтобы иметь возможность решить проблему для обработки указанной ошибки. Просто измените тип возвращаемого значения на строковый тип

следующее:

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

Зависит от случая сценария. Вышеуказанное условие выполняется, когда отправка страницы направляется в метод с именем saveFormSummary просто для проверки правильности содержимого, вставленного в форму. Если процесс проверки прошел успешно, он вернет логическое значение обратно в шаблон файла представления блэйда и снова перейдет к другому процессу.