2016-05-20 19 views
6

Hi there Ho bisogno di aiuto con Symfony 3 e un MS SQL Server:Utilizzando MS SQL con Symfony 3

Sto usando Symfony 3 e voglia di connettersi a un server MS SQL, ho fatto qualche ricerca e ho scoperto che non è supportato di default ma ci sono alcuni pacchetti disponibili da usare.

Dopo aver provato alcuni di loro ho trovato un fascio, che in parte ha funzionato per me (realestateconz/mssql-fascio) ma ottengo un messaggio di errore ogni volta che provo ad interrogare il DB (ho formattato per essere più leggibile):

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)] 

Il codeline assomiglia a questo

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

mia dottrina e symfony impostazioni si presenta così:

#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 

La porta e il set di caratteri in config.yml sono commentati perché ho trovato qualcosa qui su stackoverflow sulla dottrina usando MySQL quando la porta e il set di caratteri sono definiti (non ricordo dove esattamente). In parameters.yml non riesco ad aggiungere lo schema per il DB (il percorso completo alla tabella "Utente" è database.web. [Utente]) perché verrà eseguito in un altro errore.

Il server Web esegue Ubuntu 16.04 con apache2, php5.6 (incluso il pacchetto php5-sybase) e utilizzo freetds per connettersi al server MSSQL (collegando manualmente le opere).

Qui sono le mie impostazioni FreeTDS:

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

Per quanto ho capito, Doctrine genera il male SQL-Query dalla singola linea di codice (MySQL-sintassi, invece di MSSQL-Syntax), così che cosa posso fare per risolvere questo? O c'è un altro modo per connettere e interrogare con successo un server MSSQL su Linux con Symfony 3?

+0

Provare il "driver pdo_sqlsrv" menzionato in questo [pdo_sqlsrv] (http://stackoverflow.com/questions/14648266/connect-symfony2-to-ms-sql-server). Probabilmente è più facile da implementare rispetto al pacchetto che hai menzionato sopra. –

+0

C'è un commento che dice che il driver sqlsrv è solo per Windows. Comunque sono su Linux (Ubuntu 16.04) – levanth

+0

Ho visto questo link anche: [Link] (https://dunglas.fr/2014/01/connection-to-a-ms-sql-server-from-symfony-doctrine- on-mac-o-linux /). Mi chiedo se hai provato il semplice test menzionato qui: 'php bin/console doctrine: query: sql" SELECT * FROM MY_TABLE "'. Verifica inoltre di avere tutti i requisiti di Symfony con 'php bin/symfony_requirements'. –

risposta

3

Ho trovato la soluzione da solo, è necessario fornire a Doctrine il nome esatto della tabella per le entità nella sintassi utilizzata da SQL Server.

per il formato di annotazione Symfony usa sarebbe simile a questa:

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

dopo la modifica del Tablename a MSSQL Format tutto ha funzionato come previsto.