Почему я не могу использовать свои классы Propel ORM внутри других классов или функций? - PullRequest
0 голосов
/ 08 февраля 2012

Этот код работает:

  1 <?
  2 
  5 require( '/var/www/Propel/runtime/lib/Propel.php' );
  6 // Initialize Propel with the runtime configuration
  7 Propel::init("/home/foo/Projects/bar/classes/orm/build/conf/myconfig-conf.php");
  8 // Add the generated 'classes' directory to the include path
  9 set_include_path( $_SERVER['DOCUMENT_ROOT'] . "/classes/orm/build/classes/" . get_include_path());
 10 
 11 $PQ = new ProjectsQuery();
 12 $projects = ProjectsQuery::create()->find();
 13 print_r( $projects );
 15 
 16 ?>

Однако, если я помещаю этот же код внутри класса или функции (я буду использовать функцию для этого примера), я получаю сообщение об ошибке, и объекты не print_r

  1 <?
  2 
  3 require( '/var/www/Propel/runtime/lib/Propel.php' );
  4 // Initialize Propel with the runtime configuration
  5 Propel::init("/home/foo/Projects/bar/classes/orm/build/conf/myconfig-conf.php");
  6 // Add the generated 'classes' directory to the include path
  7 set_include_path( $_SERVER['DOCUMENT_ROOT'] . "/classes/orm/build/classes/" . get_include_path());
  8 
  9     public function foo()
 10     {   
 11         $PQ = new ProjectsQuery();
 12         $projects = ProjectsQuery::create()->find();
 13         print_r( $projects );
 14     }   
 15 ?>   

Ошибка, которую я получаю в файле журнала, говорит

[Ср. 08 фев. 03:03:02 2012] [error] [client xxxx] Неустранимая ошибка PHP: необработанное исключение 'PDOException' с сообщением 'SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 Ошибка в ваш синтаксис SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'FROM' в строке 1 'в /var/www/Propel/runtime/lib/query/ModelCriteria.php:1284\nStack trace: \ n # 0 /var/www/Propel/runtime/lib/query/ModelCriteria.php (1284): PDOStatement-> execute () \ n # 1 /var/www/Propel/runtime/lib/query/ModelCriteria.php(1137) : ModelCriteria-> doSelect (Object (PropelPDO)) \ n # 2 /home/foo/Projects/bar/models/Projects.php(12): ModelCriteria-> find () \ n # 3 / home / foo / Projects / bar / controllers / Projects.php (11): foo () \ n # 4 / home / foo / Project s / bar / project-lists.php (6): Проекты -> __ construct () \ n # 5 {main} \ n \ nСледующее исключение 'PropelException' с сообщением 'Невозможно выполнить инструкцию SELECT [SELECT FROM] [wrapped: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 Ошибка в синтаксисе SQL; проверьте руководство, соответствующее yo, в /var/www/Propel/runtime/lib/query/ModelCriteria.php в строке 1287

Может кто-нибудь с большим опытом работы с Propel ORM сказать мне, как я могу использовать propel в классе или функции. Только возможность использовать это первым способом, который я упомянул, не сработает. И я просто использую прямой php. Никаких рамок или чего-либо еще.

1 Ответ

0 голосов
/ 08 января 2013

Здесь вы не включили фактический вызов функции foo(), которая может скрывать реальную проблему.Если вы вызываете его из каталога, отличного от того, в котором находится файл, содержащий foo(), то $_SERVER['DOCUMENT_ROOT'] может отличаться, поэтому ваш include_path изменится, чтобы фактически не указывать на классы Propel.

Попробуйте распечататьget_include_path() после того, как вы установите его в строке 7 и посмотрите, что у вас есть, убедитесь, что указан полный путь к файлам Propel.

...