Как только я перевожу свое приложение Laravel из MySQL в pSQL. Я продолжал получать эту ошибку.
Содержимое Ответа должно быть строкой или объектом, реализующим __toString (), с учетом «логического» значения.
У меня есть API, который должен вернуть мое продвижение
HTTP: // локальный: 8888 / API / продвижение / 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
}
__
Любые подсказки / предложения по этому будут огромной помощью!
Когда ты просто 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
}
Ваш ответ должен вернуть какой-то Response
объект. Вы не можете просто вернуть объект.
Так что измените его на что-то вроде:
return Response::json($promotion);
или мой любимый с помощью вспомогательной функции:
return response()->json($promotion);
Если возврат ответа не работает, это может быть проблемой кодирования. Смотрите эту статью: Содержимое ответа должно быть строкой или объектом, реализующим __toString (), \"булево \" дано."
Я получил эту проблему, когда использовал вызов ajax для извлечения данных из базы данных. Когда контроллер вернул массив, он преобразовал его в логическое значение. Проблема заключалась в том, что у меня были «недопустимые символы», такие как ú (с акцентом).