以 json 格式返回 eloquent 集合

Posted

技术标签:

【中文标题】以 json 格式返回 eloquent 集合【英文标题】:Return eloquent collection as json format 【发布时间】:2014-07-14 11:06:56 【问题描述】:

我正在尝试在 Laravel 中实现一个 RESTful api,对于我的索引,我想将所有任务作为 json 返回。

但是,当我使用

return Response::json(Task::all());

我收到一个错误:“响应内容必须是实现 __toString() 的字符串或对象,给定“布尔值”。

我在使用时遇到同样的错误:

返回任务::all();

我认为这应该有效?我做错了什么?

我仔细检查了 Task::all() 是否真的返回任何东西,它确实返回了。这段代码在另一个项目中工作,虽然在另一个服务器上,也许是另一个 php 版本?

有人建议使用 toArray(),但我得到了相同的结果。代码:

<?php

class UserController extends BaseController 

    public function index() 
        $users = User::all();
        $userArray = $users->toArray();
        return Response::json($userArray);
    


【问题讨论】:

你在哪里称呼那些? 在我的 TaskController 中的 index() 中 【参考方案1】:

Response::json 函数期望参数 1 是一个数组。来自 API:

json( string|array $data = array(), integer $status = 200, array $headers = array() )
Return a new JSON response from the application.

因此,您不能只传递 find 的结果,而是使用 toArray() 函数并将其传递:

$tasks = Task::all();
Response::json($tasks->toArray());

编辑---

如果您使用的是 BLOB,请先对其进行 base64_encode。请参阅this 帖子。

例子:

base64_encode($user['image']);

【讨论】:

对不起,我得到了完全相同的结果。见帖子编辑。 向问题添加了更新的代码。请注意,我的任务示例只是一个示例。这实际上是关于用户... 同样的错误。我刚刚注意到,如果我只选择用户名和密码,它就可以正常工作。用户表中有一个用于头像的 blob。这会导致问题吗? 是的,做到了。请注意, toArray() 确实不是必需的。没有它也能正常工作。

以上是关于以 json 格式返回 eloquent 集合的主要内容,如果未能解决你的问题,请参考以下文章

从 Eloquent 集合中删除不匹配的条件记录

修改 Eloquent 查询以使其始终返回空集合的最有效方法是啥?

使用 Vue.js 以 JSON 格式返回列表的 API 的 AJAX 调用

如何将我的 Eloquent 集合转换为 JSON?

遍历数组集合并返回命名键值对(Laravel/Eloquent)

如何将 Laravel 输出的日期格式更改为 JSON?