使用symfony

时间:2017-03-02 14:12:34

标签: php symfony genesys

我有一个在Symfony中构建的管理应用程序,我需要从其他应用程序获取信息,Genesys是一个企业软件,用于处理从手机到在线聊天帮助的各种类型的通信,Genesys历史数据的数据库是面向对象的并且易于使用,但我想知道与它进行交互的最佳方式是什么,我的Symfony项目已经建立了连接,但是我不确定我是否应该使用查询来获取信息或者根据以下内容创建和映射对象Genesys的设计和SDK或库是不可能的,因为Genesys只为Java和Microsoft .Net提供此类软件。

config.yml

# Doctrine Configuration
doctrine:
    dbal:
         default_connection: cscc
        connections:
            cscc:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8                
            infomart:
                driver:   pdo_sqlsrv
                host:     '%database_host2%'
                port:     '%database_port2%'
                dbname:   '%database_name2%'
                user:     '%database_user2%'
                password: '%database_password2%'
                charset:  UTF8       
             wfm:
                driver:   pdo_sqlsrv
                host:     '%database_host3%'
                port:     '%database_port3%'
                dbname:   '%database_name3%'
                user:     '%database_user3%'
                password: '%database_password3%'
                charset:  UTF8 

请考虑以下事项:  我需要在纯sql方法中使用的查询类型有点复杂,而且很长

Select DISTINCT INTERACTION_FACT_GI2.START_TS_TIME as cal_date
,RESOURCE_GI2.EMPLOYEE_ID as Windows_User
,RESOURCE_GI2.RESOURCE_NAME Ignition_ID
,RESOURCE_GI2.AGENT_FIRST_NAME
,RESOURCE_GI2.AGENT_LAST_NAME
,INTERACTION_FACT_GI2.SOURCE_ADDRESS as Phone
,INTERACTION_FACT_GI2.TARGET_ADDRESS
,TicketType
,AgentComment
,ItemCategory
,Problem
,Solution
,storeID
,LoyaltyNumber
,OrderNumber
 FROM [IRF_USER_DATA_CUST_1] 
 JOIN INTERACTION_RESOURCE_FACT_GI2 ON      (INTERACTION_RESOURCE_FACT_GI2.INTERACTION_RESOURCE_ID=IRF_USER_DATA_CUST_1.INTERACTION_RESOURCE_ID)
  JOIN INTERACTION_FACT_GI2 on (INTERACTION_FACT_GI2.INTERACTION_ID=INTERACTION_RESOURCE_FACT_GI2.INTERACTION_ID)
  JOIN DATE_TIME ON (DATE_TIME.DATE_TIME_KEY=INTERACTION_FACT_GI2.START_DATE_TIME_KEY)
  JOIN MEDIA_TYPE ON (MEDIA_TYPE.MEDIA_TYPE_KEY=INTERACTION_RESOURCE_FACT_GI2.MEDIA_TYPE_KEY)
  JOIN RESOURCE_GI2 ON (INTERACTION_RESOURCE_FACT_GI2.RESOURCE_KEY=RESOURCE_GI2.RESOURCE_KEY)
  JOIN [INTERACTION_TYPE] ON [INTERACTION_TYPE].[INTERACTION_TYPE_KEY] = INTERACTION_FACT_GI2.INTERACTION_TYPE_KEY

 Where [IRF_USER_DATA_CUST_1].TICKETTYPE =''
  AND [IRF_USER_DATA_CUST_1].TICKETTYPE IS NOT NULL
  AND MEDIA_TYPE.MEDIA_NAME IN ('Voice','Email')
  AND [INTERACTION_TYPE].INTERACTION_TYPE= 'Inbound'
  AND INTERACTION_FACT_GI2.START_TS_TIME  > '2017-01-26 00:00:00' and  INTERACTION_FACT_GI2.START_TS_TIME < '2017-01-27 23:59:59'

  order by INTERACTION_FACT_GI2.START_TS_TIME

2 个答案:

答案 0 :(得分:1)

您绝对应该创建Genesys数据库并将其映射到Genesys数据库。 通常,您希望从网站业务代码中推离供应商(在本例中为Genesys)相关语法和交互。

要执行此操作,请创建UserRepository(和其他存储库,具体取决于您管理的对象),内部使用GenesysClient。在GenesysClient中,您可以编写Genesys特定查询。

这样,您的代码与Genesys分离,更具可读性,如果需要,可以在GenesysClient内进行必要的更改。

答案 1 :(得分:0)

因此,假设您必须连接到infomart数据库连接,并且需要在$someID表中获取代表PERSON的PERSON;您将创建一个连接并运行如下查询:

$someID = ...
...

$infomart = $this->get('doctrine.dbal.infomart_connection');

$query = "SELECT P.NAME,P.DATE,S.USER
          FROM PERSON P
          WHERE P.ID = '".$someID."'";
$result = $infomart->fetchAll( $query );

您仍然需要找出在MS SQL Server上运行所需的正确SQL查询,但之后不依赖于任何其他Bundle或API。我使用Oracle数据库执行类似操作。