Ошибка & quot; Невозможно использовать объект типа stdClass в качестве массива & quot; при доступе к явно существующим данным целочисленного типа из результата запроса базы данных Laravel

Я получил свои данные из команды запроса базы данных Laravel:

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

Когда я сохраняю свои данные, я получаю:

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, я был уверен, что могу получить доступ к данным, возвращаемым как простой словарь / хэш-карта.

РЕДАКТИРОВАТЬ: Извините, я понимаю мои очень, очень новичок ошибки. Не надо на это отвечать. Благодарю.

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
2

Другие решения

stdClass — это объект. Вы не можете использовать объект с синтаксисом массива для доступа к его свойствам, если класс не реализует ArrayAccess интерфейс.

Как указывает @IbrahimLawal, var_dump выводит как тип, так и значение. Просто повторение $group->max_question_display обеспечит только ценность

echo $group->max_question_display; // 5

В итоге: вы должен используйте синтаксис стрелки при взаимодействии с stdClass.

1

По вопросам рекламы [email protected]