Jump to content
Дизайн и модификация Invision Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

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

Recommended Posts

Здравствуйте. Разрабатывал модуль в обычной версии, потом добавил 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

Share this post


Link to post

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

 

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

 

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

Share this post


Link to post

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

 

У меня:

 

        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'];
			}
		}
	}

Share this post


Link to post

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

 

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

Share this post


Link to post

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

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

Share this post


Link to post

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

Edited by TemKa_SD

Share this post


Link to post

Разница в

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

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

 

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

Share this post


Link to post

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

Share this post


Link to post

Я убрал код от $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}

 

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

Edited by TemKa_SD

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...