我有一个在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
答案 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数据库执行类似操作。