Jump to content

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


TemKa_SD
 Share

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

Link to comment
Share on other sites

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

 

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

 

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

Link to comment
Share on other sites

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

 

У меня:

 

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

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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

Edited by TemKa_SD
Link to comment
Share on other sites

Я убрал код от $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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...