【问题标题】:Cannot use object of type stdClass as array in Laravel不能在 Laravel 中使用 stdClass 类型的对象作为数组
【发布时间】:2018-10-02 03:37:03
【问题描述】:

我收到以下错误:

PHP 致命错误:无法在 C:\xampp\htdocs\enginepoker2\storage\framework\views\10cbbd076bede57a96e59c43af0e1b9e022b4a69.php 第 115 行中将 stdClass 类型的对象用作数组

查询生成器:

$statsMoneyInPlay = DB::table('enginepoker_log.poker')
    ->select(
        DB::raw("UNIX_TIMESTAMP(Date(ts)*100) as timestamp"),
        DB::raw("SUM(pot + p1pot + p2pot + p3pot + p4pot + p5pot + p6pot + p7pot + p8pot + p9pot) / count(*) As moneyInPlay")
    )
    ->groupBy(DB::raw("DATE(ts)"))
    ->orderByRaw("DATE(ts)")
    ->get()
    ->toArray();

得到错误的刀片:

@php
    foreach ($statsMoneyInPlay as $key => $value) {
        echo "[".$value[0].", ".$value[1]."],";
    }
@endphp

【问题讨论】:

标签: php mysql database laravel laravel-blade


【解决方案1】:

该数据库查询返回 CollectionstdClass 对象。它不返回数组的Collection。在该Collection 上调用toArray 将为您提供stdClass 对象的数组。

@foreach ($statsMoneyInPlay as $value)
    [ {{ $value->timestamp }}, {{ $value->moneyInPlay }} ],
@endforeach

【讨论】:

    【解决方案2】:

    错误是由于数组本身的滥用造成的。请尝试以下操作:

    foreach($statsMoneyInPlay as $stat) {
      echo "[" . $stat['timestamp'] . ", " . $stat['moneyInPlay'] . "]";
    }
    

    编辑$statsMoneyInPlay 是一个对象数组,因此访问它的正确方法是:

    foreach($statsMoneyInPlay as $stat) {
      echo "[" . $stat->timestamp . ", " . $stat->moneyInPlay . "]";
    }
    

    【讨论】:

    • @MuhammadRomiMuhtarom 已修复,lagbox 应该对上述答案给予适当的评价
    • 好的,我仍然得到一个错误,这是错误说 Uncaught SyntaxError: Unexpected token ,
    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 2019-12-11
    • 1970-01-01
    • 2021-12-17
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多