Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

Помогите исправить Whoops\Exception\ErrorException: Invalid argument supplied for foreach() (2)

Рекомендованные сообщения

Здравствуйте. Разрабатывал модуль в обычной версии, потом добавил DEV версию, включил и появилась ошибка.

 

Whoops\Exception\ErrorException: Invalid argument supplied for foreach() (2)

#0 /var/www/dev/data/www/dev.wc3.games/applications/sharedstats/sources/DbIntegration/Db.php(229): Whoops\Run->handleError(2, 'Invalid argumen...', '/var/www/dev/da...', 229, Array)

#1 /var/www/dev/data/www/dev.wc3.games/system/Helpers/Table/Table.php(485): IPS\sharedstats\DbIntegration\_Db->getRows(Array)

#2 /var/www/dev/data/www/dev.wc3.games/applications/sharedstats/modules/front/stats/recentGames.php(112): IPS\Helpers\Table\_Table->__toString()

#3 /var/www/dev/data/www/dev.wc3.games/system/Dispatcher/Controller.php(96): IPS\sharedstats\modules\front\stats\_recentGames->manage()

#4 /var/www/dev/data/www/dev.wc3.games/applications/sharedstats/modules/front/stats/recentGames.php(33): IPS\Dispatcher\_Controller->execute()

#5 /var/www/dev/data/www/dev.wc3.games/system/Dispatcher/Dispatcher.php(146): IPS\sharedstats\modules\front\stats\_recentGames->execute()

#6 /var/www/dev/data/www/dev.wc3.games/index.php(13): IPS\_Dispatcher->run()

#7 {main}

 

При этом, ошибка проявляется на стандартной версии без моих дополнений от другого разработчика, который пилил этот модуль еще на 4.1 а потом забросил. Соответственно, если он делал в DEV версии то у него всё работало, может быть это связанно из-за разницы в линейках IPS?

 

В стандартном режиме работы форума всё в порядке, ошибок нет.

post-60255-0-09948600-1534310468_thumb.png

Поделиться сообщением


Ссылка на сообщение

В foreach должен быть массив или объект

 

Вообще код похож на \IPS\Helpers\Table\Db

 

Видимо автор часть кода скопировал из родительского класса. Посмотрите, как там сейчас сейчас.

Поделиться сообщением


Ссылка на сообщение

Да, код немного другой.

 

У меня:

 

        if( $this->onlySelected !== NULL )
       {
           foreach( $this->onlySelected as $column )
           {
               $selects[] = $column;
           }

           if( $this->group !== NULL )
           {
               $this->group = is_array( $this->group ) ? $this->group : array( $this->group );
               $this->group = array_unique( array_merge( $this->group, $this->onlySelected ) );
           }
       }
       else
       {
           if ( count( $this->joins ) )
           {
               foreach( $this->joins as $join )
               {
                   if ( isset( $join['select'] ) )
                   {
                       $selects[] = $join['select'];
                   }
               }
           }
       }

 

В исходнике:

 

		if ( count( $this->joins ) )
	{
		foreach( $this->joins as $join )
		{
			if ( isset( $join['select'] ) )
			{
				$selects[] = $join['select'];
			}
		}
	}

Поделиться сообщением


Ссылка на сообщение

Ну и ниже в некоторых места у меня добавлена переменная:

 

$this->group

 

Таким образом, у меня:

 

        /* Now get column headers */
       $query = \IPS\Db::i($this->connection)->select( $this->onlySelected ? implode( ', ', $selects ) : '*', $this->table, $where, NULL, array( 0, 1 ), $this->group );

 

В исходнике:

 

		/* Now get column headers */
	$query = \IPS\Db::i()->select( ( count( $selects ) ) ? $this->table . '.*, ' . implode( ', ', $selects ) : '*', $this->table, NULL, NULL, array( 0, 1 ) );

Поделиться сообщением


Ссылка на сообщение

$this->onlySelected не используется

$this->group тоже удалена в последних версиях

Поделиться сообщением


Ссылка на сообщение
08/15/18 06:08 (изменено)

Просто вставить код из новой версии Db? Зачем вообще идет подключение этого файла, если он есть в движке?

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

Разница в

$query = \IPS\Db::i($this->connection)

$query = \IPS\Db::i()

 

В первом варианте подключается сторонняя бд

Поделиться сообщением


Ссылка на сообщение

А, понял. Спасибо.

Поделиться сообщением


Ссылка на сообщение
08/15/18 06:48 (изменено)

Я убрал код от $this->group, теперь не подключается к внешней БД, использует БД IPS.

 

SELECT count(*) FROM `stats_scoredgames`
IPS\Db\Exception: Table 'dev_ips.stats_scoredgames' doesn't exist (1146)
#0 /var/www/dev/data/www/dev.wc3.games/system/Db/Select.php(378): IPS\_Db->preparedQuery('/*IPS\\sharedsta...', Array, true)
#1 /var/www/dev/data/www/dev.wc3.games/system/Db/Select.php(440): IPS\Db\_Select->runQuery()
#2 /var/www/dev/data/www/dev.wc3.games/system/Db/Select.php(361): IPS\Db\_Select->rewind()
#3 /var/www/dev/data/www/dev.wc3.games/applications/sharedstats/sources/DbIntegration/Db.php(250): IPS\Db\_Select->first()
#4 /var/www/dev/data/www/dev.wc3.games/system/Helpers/Table/Table.php(485): IPS\sharedstats\DbIntegration\_Db->getRows(Array)
#5 /var/www/dev/data/www/dev.wc3.games/applications/sharedstats/modules/front/stats/recentGames.php(114): IPS\Helpers\Table\_Table->__toString()
#6 /var/www/dev/data/www/dev.wc3.games/system/Dispatcher/Controller.php(96): IPS\sharedstats\modules\front\stats\_recentGames->manage()
#7 /var/www/dev/data/www/dev.wc3.games/applications/sharedstats/modules/front/stats/recentGames.php(35): IPS\Dispatcher\_Controller->execute()
#8 /var/www/dev/data/www/dev.wc3.games/system/Dispatcher/Dispatcher.php(146): IPS\sharedstats\modules\front\stats\_recentGames->execute()
#9 /var/www/dev/data/www/dev.wc3.games/index.php(13): IPS\_Dispatcher->run()
#10 {main}

 

Не пойму, всё перекопал, везде всё норм.

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

Значит что-то лишнее удалили.

Поделиться сообщением


Ссылка на сообщение

Блин, еще раз удалил, и всё в порядке. Бред. Ладно, вроде всё работает, большое спасибо.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...