Using MS SQL with Symfony 3



嗨,我需要一些关于Symfony 3和MS SQL Server的帮助:

我正在使用Symfony 3,并想连接到MS SQL Server,我做了一些研究,发现它在默认情况下不受支持,但有一些Bundle可供使用。

在尝试了其中的一些之后,我发现了一个对我部分有效的Bundle(realestateconz/mssql Bundle),但每次我尝试查询DB时都会收到一条错误消息(我将其格式化为更可读):

Uncaught PHP Exception DoctrineDBALDBALException: 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)]

代码行看起来像这个

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

我的学说和符号设置如下:

#config.yml
doctrine:
dbal:
driver_class: RealestateMssqlBundleDriverPDODblibDriver
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

config.yml中的端口和字符集被注释掉了,因为我在stackoverflow上发现了一些关于定义端口和字符集中使用MySQL的原则的内容(但记不清具体在哪里)。在parameters.yml中,我无法添加DB的架构(表"User"的完整路径是database.web.[User]),因为它将在另一个错误中运行。

Webserver运行带有apache2、php5.6(包括php5-sybase包)的Ubuntu 16.04,我使用freetds连接到MSSQL Server(手动连接工作)。

以下是我的FreeTDS设置:

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

据我所知,Doctrine从单行代码中生成了错误的SQL查询(MySQL语法而不是MSSQL语法),那么我该怎么做才能解决这个问题呢?或者,是否有其他方法可以使用Symfony 3在Linux上成功连接和查询MSSQL Server?

我自己找到了解决方案,您需要在SQL Server使用的语法中为Doctrine提供实体的确切表名。

对于Symfony使用的注释格式,它看起来像这样:

/** Annotation for your Classfile
* ExampleClass
* 
* @ORMTable(name="[ExampleClass]") <-- Square Brackets for MSSQL
* @ORMEntity
*/

在将表名更改为MSSQL格式之后,一切都如预期的那样工作。

相关内容

  • 没有找到相关文章