Каков наилучший способ использования информации из другой базы данных с помощью Symfony?

У меня есть приложение для управления, которое собирается в 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

1

Решение

Вам обязательно нужно создавать и отображать объекты в базу данных Genesys.
Как правило, вы хотите оттолкнуть синтаксис и взаимодействие с поставщиком (в данном случае Genesys) от бизнес-кода веб-сайта.

Для этого создайте UserRepository (и другие репозитории, в зависимости от того, какими объектами вы управляете), которые используются внутри GenesysClient, В GenesysClient Вы можете написать конкретные запросы Genesys.

Таким образом, ваш код отделен от Genesys, становится более читабельным, необходимые изменения могут быть сделаны внутри GenesysClient если нужно.

1

Другие решения

Допустим, вы должны были подключиться к вашему infomart подключение к базе данных, и вам нужно было получить $someID который представляет ЧЕЛОВЕКА в 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 );

Вам все еще нужно будет определить правильный запрос SQL, который вам нужно выполнить на вашем MS SQL Server, но тогда нет никакой зависимости от любого другого пакета или API. Я делаю нечто подобное с базой данных Oracle.

0

По вопросам рекламы [email protected]