从 Laravel 数据库查询结果中访问明确存在的整数类型数据时出现错误“无法使用 stdClass 类型的对象作为数组”

Posted

技术标签:

【中文标题】从 Laravel 数据库查询结果中访问明确存在的整数类型数据时出现错误“无法使用 stdClass 类型的对象作为数组”【英文标题】:Error "Cannot use object of type stdClass as array" when accessing a clearly existing, integer type data from Laravel Database query result 【发布时间】:2016-11-27 08:16:40 【问题描述】:

我从 Laravel 数据库查询命令获取数据:

$group = DB::table('groups')->where("id", $group_id)->first();

当我 var 转储我的数据时,我得到:

object(stdClass)#200 (7) 
  ["id"]=>
  int(1)
  ["levels_id"]=>
  int(1)
  ["title"]=>
  string(8) "Novice 1"
  ["description"]=>
  string(11) "Lorem Ipsum"
  ["max_question_display"]=>
  int(5)
  ["created_at"]=>
  NULL
  ["updated_at"]=>
  NULL

我想访问max_question_display。但是当我这样做时:

var_dump($group["max_question_display"]);

php 返回错误Cannot use object of type stdClass as array

当我这样做时:

var_dump($group->max_question_display);

我明白了:

int(5)

但我不想要int。我只想要5。整数形式。

如果我 foreach 循环 $group:

foreach ($group as $t) 
    echo "<pre>";
    var_dump($t);
    echo "</pre>";

我在每个循环中获取每个数据作为单个数据。

int(1)
int(1)
string(8) "Novice 1"
string(11) "Lorem Ipsum"
int(5)
NULL
NULL

这显然也不是我正在寻找的结果访问方式。

我也尝试获取数组的第一个元素,认为这可能是一个包含 1 个元素的数组,但这也会引发同样的错误。

我知道这个网站上关于这个错误的一般答案是“stdClass 不是数组”。我浏览了几个与我的标题相似的问题,但没有来自 Laravel DB 的地址对象。当我阅读 Laravel DB 的手册时,我确信我可以像访问简单的字典/哈希图一样访问返回的数据。

编辑:对不起,我理解我非常非常新手的错误。这个不用回答了。谢谢。

【问题讨论】:

执行var_dump 会为您提供类型和值。 $group-&gt;max_question_display 是正确的方法。如果您对类型不感兴趣,可以发送echo @IbrahimLawal 哦该死的。我理解我的错误。那是 var_dump 的结果。如果我直接访问变量,我将得到整数。对不起。 #facepalm 很高兴有帮助:) 【参考方案1】:

注意你的第一个 var_dump 的第一行:

object(stdClass)#200

因为您正在处理一个对象,所以您可以使用-&gt; 访问它的属性。当你这样做时:

var_dump($group->max_question_display);

您在输出中看到(int) 的原因是var_dump 函数在值旁边显示值类型。要访问该值,请执行

$group->max_question_display;

如果你想在没有类型的情况下在屏幕上看到它,请使用 echo

echo $group->max_question_display; // 5

【讨论】:

是的,我一发布这个问题,就立刻在我脑海里敲响了警钟。我犯了一个多么愚蠢的误解。谢谢。我会尽快接受这个答案。 @ChenLiYong,没关系;发生在我们所有人身上。只是提醒我,计算机对我们正在尝试做的事情的理解为零。他们只是按照指示行事。【参考方案2】:

stdClass 是一个对象。如果类未实现ArrayAccess 接口,则不能使用具有数组语法的对象访问其属性。

正如@IbrahimLawal 所指出的, var_dump 输出类型和值。只需回显$group-&gt;max_question_display 即可提供价值

echo $group->max_question_display; // 5

总结:在与 stdClass 交互时,您必须使用箭头语法。

【讨论】:

我认为您的最后一句话不是您要输入的内容。

以上是关于从 Laravel 数据库查询结果中访问明确存在的整数类型数据时出现错误“无法使用 stdClass 类型的对象作为数组”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel doesntHave exists 用法

在 laravel 5.5 中检查查询没有结果

Laravel Eloquent,仅选择存在关系的行

Laravel Eloquent 搜索表单查询(表单中的多个参数)

如何从两个不同的 Laravel 查询构建器中获取我的两个结果集以同时显示在同一页面上?

laravel 雄辩的数据透视表查询“不明确的列名”