从 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->max_question_display
是正确的方法。如果您对类型不感兴趣,可以发送echo
。
@IbrahimLawal 哦该死的。我理解我的错误。那是 var_dump 的结果。如果我直接访问变量,我将得到整数。对不起。 #facepalm
很高兴有帮助:)
【参考方案1】:
注意你的第一个 var_dump 的第一行:
object(stdClass)#200
因为您正在处理一个对象,所以您可以使用->
访问它的属性。当你这样做时:
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->max_question_display
即可提供价值
echo $group->max_question_display; // 5
总结:在与 stdClass 交互时,您必须使用箭头语法。
【讨论】:
我认为您的最后一句话不是您要输入的内容。以上是关于从 Laravel 数据库查询结果中访问明确存在的整数类型数据时出现错误“无法使用 stdClass 类型的对象作为数组”的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent 搜索表单查询(表单中的多个参数)