当前位置: 首页 > 知识库问答 >
问题:

larvel DB:first()方法带来的响应内容必须是字符串

慕容嘉熙
2023-03-14

我使用Laravel Illumb,当我使用first()方法获得单个结果时,我得到了这个错误:

响应内容必须是实现给定__toString()、对象的字符串或对象。

return DB::table('todos')->where("title","your List")->first();

如果我使用get()方法选择,它将起作用:

return DB::table('todos')->where("title","your List")->get();

你知道第一句话有什么不对吗?


共有2个答案

巫英纵
2023-03-14

@乔尔欣兹已经尽可能详细地阐述了这一点。但出于对这种行为的好奇,我在查询生成器的where子句下的Laravel文档中发现了一些有趣的东西

使用DBFacade并调用get()返回(StdClass)对象的集合。由于它位于Laravel的集合中,所以有一些方法可以将其底层属性转换为字符串。但是,当您直接从查询生成器访问集合中的一个项时,就会有一个纯StdClass对象,它没有实现\uu toString()(非常确定)。

我认为同样的情况是,如果您有一个集合,并且您检索一个底层数组,比如说$collection[0],您将丢失Laravel集合的\u toString()的实现,因为您已经打开了它,现在有了纯PHP数组。

这种行为正是查询生成器的开发方式。为了更好地处理查询结果,您可以返回json\u encode($query\u result)返回响应()-

蒋星雨
2023-03-14

当您执行-

/**
 * Convert the collection to its string representation.
 *
 * @return string
 */
public function __toString()
{
    return $this->toJson();
}

/**
 * Get the collection of items as JSON.
 *
 * @param  int  $options
 * @return string
 */
public function toJson($options = 0)
{
    return json_encode($this->jsonSerialize(), $options);
}

/**
 * Convert the object into something JSON serializable.
 *
 * @return array
 */
public function jsonSerialize()
{
    return array_map(function ($value) {
        if ($value instanceof JsonSerializable) {
            return $value->jsonSerialize();
        } elseif ($value instanceof Jsonable) {
            return json_decode($value->toJson(), true);
        } elseif ($value instanceof Arrayable) {
            return $value->toArray();
        } else {
            return $value;
        }
    }, $this->items);
}

如您所见,它所做的一切都是将整个集合转换为json。

但是当你做-

所以<代码>-

由于该类没有实现\uuuToString()方法,因此响应不知道如何处理它。相反,您会得到一个错误。

您可以通过在对象上运行json_encode()或返回json响应来轻松模拟相同的响应。

 类似资料:
  • 问题内容: 如何更改查询以免发生此错误: XML数据类型方法“ alue”必须是字符串文字 T-SQL代码: 问题答案: 对于value方法,不能以这种方式将变量串联为字符串。您需要使用。 因此,您的示例将如下所示:

  • 本文向大家介绍PHP限制HTML内容中图片必须是本站的方法,包括了PHP限制HTML内容中图片必须是本站的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP限制HTML内容中图片必须是本站的方法。分享给大家供大家参考。具体实现方法如下: 1. PHP代码如下: 2. 测试HTML代码: 3. 运行结果: 希望本文所述对大家的php程序设计有所帮助。

  • 运行此代码时 我得到这个错误 read_bikeins=pdf。PdfFileReader(bikeins)回溯(最近一次呼叫最后一次): 文件“”,第1行,以read\u bikeins=pdf格式。PdfFileReader(比基恩) 文件“C:\Users\Naveen Raj\Anaconda3\lib\site packages\PyPDF2\pdf.py”,第1084行,在init s

  • 编辑:我已经不在这个地方工作了,我们还是切换到了Node.js,所以我无法验证是否有人的答案是正确的。请投票关闭(只需要再多一个)。 在Raspberry Pi上运行的程序是用Python编写的,我使用方法将数据发送到服务器。 我在系统的早期部署中也注意到了这种行为,它使用Android设备来发送数据。所以我不认为客户有什么问题... 我对服务器进行了多次测试,尤其是在添加新特性时,以前从未遇到过

  • 看起来它工作得很好,但我想知道我是否必须确保新代码需要线程安全?这里有什么意见吗?抱歉用了假名字,提前致谢。

  • 本文向大家介绍Ajax获取响应内容长度的方法,包括了Ajax获取响应内容长度的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Ajax获取响应内容长度的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Ajax程序设计有所帮助。