Невозможно использовать объект типа stdClass в качестве массива в Laravel - PullRequest
0 голосов
/ 02 октября 2018

Я получил следующую ошибку:

Неустранимая ошибка PHP: невозможно использовать объект типа stdClass в качестве массива в C: \ xampp \ htdocs \ enginepoker2 \ storage \ framework \ views \ 10cbbd076bede57a96e59c43af0e1b9e022b4a69.php настрока 115

Построитель запросов:

$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();

Blade, который получает ошибку:

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

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Этот запрос БД возвращает Collection из stdClass объектов.Он не возвращает Collection массивов.Вызов toArray для этого Collection даст вам массив stdClass объектов.

@foreach ($statsMoneyInPlay as $value)
    [ {{ $value->timestamp }}, {{ $value->moneyInPlay }} ],
@endforeach
0 голосов
/ 02 октября 2018

Ошибка возникает из-за неправильного использования самого массива.Попробуйте выполнить следующее:

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

EDIT : $statsMoneyInPlay - это массив объектов, поэтому правильный способ доступа к нему будет:

foreach($statsMoneyInPlay as $stat) {
  echo "[" . $stat->timestamp . ", " . $stat->moneyInPlay . "]";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...