响应内容必须是字符串或 object 实现 __toString(), "object" given

The Response content must be a string or object implementing __toString(), "object" given

我有两个查询结果,$query1 和 $query2

$query1的内容打印如下:

{"name":"Gerencia Regional Llanos","name":"Lorem ipsum"}

$query2 是:

[{"id":1,"name":"Lorem upsum"},{"id":2,"name":"Lorem upsum"}]

当我在 blade 中打印 $query1 时,一切正常,但是当我尝试打印 $query2 时,服务器抛出以下错误:

htmlentities() expects parameter 1 to be string, object given

在blade中我用同样的方式调用它们:

{{ $query1 }}

您第一个查询的内容是一个字符串。但是你的第二个查询的内容被转换为一个数组——我猜是因为它是事物的集合而不是单一的事物。因此你不能用 {{ $x }} 打印它,因为它调用 htmlentities(),它只想处理字符串。

您可以确保在第二个查询中也只获取一个可以转换为字符串的对象,或者您可以使用 foreach 循环打印 collection/array 中的每个项目时间.

创建如下函数

function utf8_encode_deep(&$input) {
    if (is_string($input)) {
        $input = utf8_encode($input);
    } else if (is_array($input)) {
        foreach ($input as &$value) {
            self::utf8_encode_deep($value);
        }

        unset($value);
    } else if (is_object($input)) {
        $vars = array_keys(get_object_vars($input));

        foreach ($vars as $var) {
            self::utf8_encode_deep($input->$var);
        }
    }
}

尝试执行以下操作

utf8_encode_deep($query);

可以看例子解决问题。 需要以上述格式响应请求的数据。

 $datas = DB::table('user_table')
                    ->get();
  // response the desired data
   return response()->json(['datas' => $datas], 200);