2014-04-16 1 views
6

내가 beberlei 교리-확장을 통합하는 방법을 잘 모릅니다 젠드 프레임 워크 교리 확장을 beberlei 구현합니다. 나는 응용 프로그램 모듈 일부터 내 module.config.php에서 재판을방법이

"beberlei/DoctrineExtensions": "dev-master"

: 내가 작곡가로 설치

'doctrine' => array(
    'driver' => array(
     __NAMESPACE__ .'_driver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => array(__DIR__ . '/../src/'.__NAMESPACE__.'/Entity') 
     ), 
     'orm_default' => array(
      'drivers' => array(
       __NAMESPACE__.'\Entity' => __NAMESPACE__. '_driver' 

      ) 
     ) 
    ), 
    'configuration' => array(
     'orm_default' => array(
      'string_functions' => array(
       'GroupConcat' => '/vendor/beberlei/DoctrineExtensions\Query\MsySql\GroupConcat' 
      ) 
     ) 
    ) 
), 

그러나이 예외가 발생했습니다 :

Fatal error: Class '/vendor/beberlei/DoctrineExtensions\Query\MsySql\GroupConcat' not found

답변

5

구성 /vendor/beberlei 폴더를 참조 할 필요가 없으므로 자동 로더가이를 처리합니다.

$config = $this->getEntityManager()->getConfiguration(); 
$config->addCustomStringFunction('GROUP_CONCAT', 'DoctrineExtensions\Query\MySq\GroupConcat'); 

는 이제 'GROUP_CONCAT'를 사용할 수 있습니다 : 서비스 클래스에서 작곡가로

"beberlei/DoctrineExtensions": "dev-master" 

사용이 코드를 설치 한 후

'doctrine' => array(
    'driver' => array(
     __NAMESPACE__ .'_driver' => array(
      'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => array(__DIR__ . '/../src/'.__NAMESPACE__.'/Entity') 
     ), 
     'orm_default' => array(
      'drivers' => array(
       __NAMESPACE__.'\Entity' => __NAMESPACE__. '_driver' 

      ) 
     ) 
    ), 
    'configuration' => array(
     'orm_default' => array(
      'string_functions' => array(
       'GroupConcat' => 'DoctrineExtensions\Query\Mysql\GroupConcat' 
      ) 
     ) 
    ) 
), 
+0

의 : catch되지 않은 예외 '젠드 \ ModuleManager \ 예외 \의 RuntimeException의' '모듈 (DoctrineExtensions)을 초기화 할 수 없습니다.'라는 메시지가 나타납니다. /var/www/marcus/adl_zf2/newADL/dartliga/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php on line 189 –

+1

모든 종속성을 올바르게 설치하면 작동합니다. 작곡가와 함께하기 쉽습니다. composer.json의 필요한 직원 옆에''wiredmedia/doctrine-extensions ''와 같은 문자열이 있어야합니다 : "*"' – zeliboba

+2

로컬의 내 프롤렘은 해결되었지만 서버 문제는 아직 해결되지 않았습니다. 코드는 정확히 동일합니다. 원격 서버에 오류가 발생했습니다. 치명적인 오류가 발생했습니다. 'DoctrineExtensions \ Query \ MySql \ GroupConcat'클래스가 없습니다. –

3

: 구성은 아마 이런 식으로 뭔가를 찾아야한다 귀하의 DQL에 이런 :

$dql = "SELECT GROUP_CONCAT(elem.name) FROM ..... GROUP BY ..."; 
$query = $this->getEntityManager()->createQuery($dql); 
return $query->getArrayResult(); 
+0

사용자가 매번 사용자 정의 함수를 첨부하고 싶지 않으면 아래의 예제를 수동으로 따르십시오. 구성을 통해 사용자 지정 기능을 설치하는 방법도 있습니다. – zeliboba

0

그것은

'DoctrineExtensions' => 'vendor/beberlei/DoctrineExtensions' 

3이이 module.config에 추가 autoload_classmapp.php이 줄을 추가 작곡가

composer require beberlei/DoctrineExtensions 

2-

1 설치 DoctrineExtensions으로 날 위해 일했습니다. PHP

'doctrine'=>array(
'configuration' => array(
     'orm_default' => array(
      'datetime_functions' => array(
       'date' => 'DoctrineExtensions\Query\Mysql\Date', 
       'date_format' => 'DoctrineExtensions\Query\Mysql\DateFormat', 
       'dateadd' => 'DoctrineExtensions\Query\Mysql\DateAdd', 
       'datediff' => 'DoctrineExtensions\Query\Mysql\DateDiff', 
       'day' => 'DoctrineExtensions\Query\Mysql\Day', 
       'dayname' => 'DoctrineExtensions\Query\Mysql\DayName', 
       'last_day' => 'DoctrineExtensions\Query\Mysql\LastDay', 
       'minute' => 'DoctrineExtensions\Query\Mysql\Minute', 
       'second' => 'DoctrineExtensions\Query\Mysql\Second', 
       'strtodate' => 'DoctrineExtensions\Query\Mysql\StrToDate', 
       'time' => 'DoctrineExtensions\Query\Mysql\Time', 
       'timestampadd' => 'DoctrineExtensions\Query\Mysql\TimestampAdd', 
       'timestampdiff' => 'DoctrineExtensions\Query\Mysql\TimestampDiff', 
       'week' => 'DoctrineExtensions\Query\Mysql\Week', 
       'weekday' => 'DoctrineExtensions\Query\Mysql\WeekDay', 
       'year' => 'DoctrineExtensions\Query\Mysql\Year', 
      ), 
      'numeric_functions' => array(
       'acos' => 'DoctrineExtensions\Query\Mysql\Acos', 
       'asin' => 'DoctrineExtensions\Query\Mysql\Asin', 
       'atan2' => 'DoctrineExtensions\Query\Mysql\Atan2', 
       'atan' => 'DoctrineExtensions\Query\Mysql\Atan', 
       'cos' => 'DoctrineExtensions\Query\Mysql\Cos', 
       'cot' => 'DoctrineExtensions\Query\Mysql\Cot', 
       'hour' => 'DoctrineExtensions\Query\Mysql\Hour', 
       'pi' => 'DoctrineExtensions\Query\Mysql\Pi', 
       'power' => 'DoctrineExtensions\Query\Mysql\Power', 
       'quarter' => 'DoctrineExtensions\Query\Mysql\Quarter', 
       'rand' => 'DoctrineExtensions\Query\Mysql\Rand', 
       'round' => 'DoctrineExtensions\Query\Mysql\Round', 
       'sin' => 'DoctrineExtensions\Query\Mysql\Sin', 
       'std' => 'DoctrineExtensions\Query\Mysql\Std', 
       'tan' => 'DoctrineExtensions\Query\Mysql\Tan', 
      ), 
      'string_functions' => array(
       'binary' => 'DoctrineExtensions\Query\Mysql\Binary', 
       'char_length' => 'DoctrineExtensions\Query\Mysql\CharLength', 
       'concat_ws' => 'DoctrineExtensions\Query\Mysql\ConcatWs', 
       'countif' => 'DoctrineExtensions\Query\Mysql\CountIf', 
       'crc32' => ' DoctrineExtensions\Query\Mysql\Crc32', 
       'degrees' => 'DoctrineExtensions\Query\Mysql\Degrees', 
       'field' => 'DoctrineExtensions\Query\Mysql\Field', 
       'find_in_set' => 'DoctrineExtensions\Query\Mysql\FindInSet', 
       'group_concat' => 'DoctrineExtensions\Query\Mysql\GroupConcat', 
       'ifelse' => 'DoctrineExtensions\Query\Mysql\IfElse', 
       'ifnull' => 'DoctrineExtensions\Query\Mysql\IfNull', 
       'match_against' => 'DoctrineExtensions\Query\Mysql\MatchAgainst', 
       'md5' => 'DoctrineExtensions\Query\Mysql\Md5', 
       'month' => 'DoctrineExtensions\Query\Mysql\Month', 
       'monthname' => 'DoctrineExtensions\Query\Mysql\MonthName', 
       'nullif' => 'DoctrineExtensions\Query\Mysql\NullIf', 
       'radians' => 'DoctrineExtensions\Query\Mysql\Radians', 
       'regexp' => 'DoctrineExtensions\Query\Mysql\Regexp', 
       'replace' => 'DoctrineExtensions\Query\Mysql\Replace', 
       'sha1' => 'DoctrineExtensions\Query\Mysql\Sha1', 
       'sha2' => 'DoctrineExtensions\Query\Mysql\Sha2', 
       'soundex' => 'DoctrineExtensions\Query\Mysql\Soundex', 
       'uuid_short' => 'DoctrineExtensions\Query\Mysql\UuidShort', 
      ), 

     ) 
    ) 
) 
1

평판이 너무 낮아서 omment하지만 :

'doctrine' => array(
'driver' => array(
    __NAMESPACE__ .'_driver' => array(
     'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
     'cache' => 'array', 
     'paths' => array(__DIR__ . '/../src/'.__NAMESPACE__.'/Entity') 
    ), 
    'orm_default' => array(
     'drivers' => array(
      __NAMESPACE__.'\Entity' => __NAMESPACE__. '_driver' 

     ) 
    ) 
), 
'configuration' => array(
    'orm_default' => array(
     'string_functions' => array(
      'GroupConcat' => 'DoctrineExtensions\Query\**MsySql**\GroupConcat' 
     ) 
    ) 
)), 

은 다음과 같아야합니다

'GroupConcat' => 'DoctrineExtensions\Query\**Mysql**\GroupConcat' 

통지는 MySQL 대신 MsySql ... 치명적인 오류 작업을 나던

+0

감사합니다. 답변을 업데이트했습니다. – Stephen