2016-05-20 3 views
6

Привет мне нужна помощь с Symfony 3 и MS SQL Server:Использование MS SQL с Symfony 3

Я использую Symfony 3 и хотите подключиться к MS SQL Server, я сделал некоторые исследования и выяснили, что он не поддерживается по умолчанию, но есть некоторые доступные Bundles.

После попытки некоторых из них я нашел один сверток, который частично работал для меня (realestateconz/MSSQL-расслоения), но я получаю сообщение об ошибке каждый раз, когда я пытаюсь запроса DB (я форматировал его более читаемым):

Uncaught PHP Exception Doctrine\DBAL\DBALException: An exception occurred while executing 
'SELECT 
    t0.id AS id_1, 
    t0.username AS username_2 
FROM user t0 
WHERE t0.username = ?' with params ["testusername"]: 

SQLSTATE[HY000]: General error: 156 General SQL Server error: 
Check messages from the SQL Server [156] (severity 15) [(null)] 

codeline выглядит следующим образом

$user = $em->getRepository('AppBundle:User')->findBy(array('username' => $username)); 

Мое учение и фреймворка настройки выглядит следующим образом:

#config.yml 
doctrine: 
    dbal: 
     driver_class: Realestate\MssqlBundle\Driver\PDODblib\Driver 
     host:  "%database_host%" 
     #port: "%database_port%" 
     dbname: "%database_name%" 
     user:  "%database_user%" 
     password: "%database_password%" 
     #charset: UTF8 

#parameters.yml 
parameters: 
    database_host: myserver 
    database_name: database  #without schema 
    database_user: user 
    database_password: pw 

Порт и Charset в config.yml закомментированы, потому что я нашел что-то здесь в stackoverflow о доктрине, использующей MySQL, когда определены порт и кодировка (не помню, где именно). В параметрах.yml я не могу добавить схему для БД (полный путь к таблице «Пользователь» - это database.web. [Пользователь]), потому что он будет работать в другой ошибке.

Веб-сервер запускает Ubuntu 16.04 с apache2, php5.6 (включая пакет php5-sybase), и я использую freetds для подключения к MSSQL-серверу (вручную работает соединение).

Вот мои настройки FreeTDS:

[MYSERVER] 
host = myserveradress 
port = 1433 
tds version = 8.0 
client charset = UTF-8 
text size = 20971520 

Насколько я понял, доктрина создает неправильный SQL-запрос из одной строки кода (MySQL-Syntax вместо MSSQL-синтаксиса), так, что могу ли я это исправить? Или есть еще один способ успешного подключения и запроса MSSQL-Server на Linux с Symfony 3?

+0

Попробуйте «драйвер pdo_sqlsrv», упомянутый в этом [pdo_sqlsrv] (http://stackoverflow.com/questions/14648266/connect-symfony2-to-ms-sql-server). Это, вероятно, проще реализовать, чем упомянутый выше пакет. –

+0

Существует один комментарий, в котором говорится, что драйвер sqlsrv предназначен только для Windows. Однако я нахожусь в Linux (Ubuntu 16.04) – levanth

+0

Я тоже видел эту ссылку: [Ссылка] (https://dunglas.fr/2014/01/connection-to-a-ms-sql-server-from-symfony-doctrine- на Mac или Linux-/). Если вы попробовали простой тест, упомянутый там: 'php bin/console doctrine: query: sql" SELECT * FROM MY_TABLE "'. Также убедитесь, что у вас есть все требования Symfony с 'php bin/symfony_requirements'. –

ответ

3

Я нашел решение самостоятельно, вам нужно предоставить Doctrine точное имя таблицы для ваших объектов в синтаксисе, используемом SQL-сервером.

Для формата аннотаций Symfony использует это будет выглядеть следующим образом:

/** Annotation for your Classfile 
* ExampleClass 
* 
* @ORM\Table(name="[ExampleClass]") <-- Square Brackets for MSSQL 
* @ORM\Entity 
*/ 

После изменения TABLENAME в MSSQL формат все работает, как ожидалось.

Смежные вопросы