2016-05-20 22 views
6

Hi there Potrzebuję pomocy z Symfony 3 oraz MS SQL Server:Korzystanie z MS SQL Symfony 3

Używam Symfony 3 i chcesz połączyć się z MS SQL Server, Robiłem rozeznanie i okazało się, że nie jest obsługiwane domyślnie, ale istnieje kilka pakietów do wykorzystania.

Po wypróbowaniu niektóre z nich znalazłem jeden pakiet, który częściowo pracował dla mnie (realestateconz/MSSQL-wiązki), ale pojawia się komunikat o błędzie, za każdym razem staram się kwerendy DB (I sformatowany być bardziej czytelny):

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 wygląda następująco

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

Moja nauka i symfony ustawień wygląda następująco:

#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 

Port i zestaw znaków w config.yml są skomentowane, ponieważ znalazłem coś tutaj na temat stackoverflow o doktrynie używającej MySQL, gdy port i zestaw znaków są zdefiniowane (nie pamiętam gdzie dokładnie). W parameters.yml nie mogę dodać schematu dla DB (pełna ścieżka do tabeli "User" to database.web. [User]), ponieważ będzie działać w innym błędzie.

Serwer sieci Web uruchamia Ubuntu 16.04 z apache2, php5.6 (w tym pakiet php5-sybase) i używam freetdów do łączenia się z serwerem MSSQL (ręczne podłączanie działa).

Oto moje ustawienia FreeTDS:

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

O ile dobrze zrozumiałem, Doctrine generuje zły zapytania SQL z jednej linii kodu (MySQL składni zamiast MSSQL składni), więc to, co czy mogę to naprawić? Czy istnieje inny sposób na pomyślne połączenie i zapytanie serwera MSSQL na Linuksie za pomocą Symfony 3?

+0

Wypróbuj sterownik "pdo_sqlsrv" wymieniony w tym pliku [pdo_sqlsrv] (http://stackoverflow.com/questions/14648266/connect-symfony2-to-ms-sql-server). Prawdopodobnie jest łatwiejsze do wdrożenia niż pakiet wspomniany powyżej. –

+0

Istnieje jeden komentarz, który mówi, że sterownik sqlsrv jest tylko dla systemu Windows. Jednak jestem na Linuksie (Ubuntu 16.04) – levanth

+0

Widziałem również ten link: [Link] (https://dunglas.fr/2014/01/connection-to-a-msq-sql-server-from-symfony-doctrine- on-mac-or-linux /). Zastanawiasz się, czy wypróbowałeś prosty test wspomniany tam: 'php bin/console doctrine: query: sql" SELECT * FROM MY_TABLE "'. Sprawdź również, czy masz wszystkie wymagania Symfony z 'php bin/symfony_requirements'. –

Odpowiedz

3

Sam znalazłem rozwiązanie, musisz podać Doctrine dokładną nazwę tabeli dla twoich jednostek w składni używanej przez SQL-Server.

dla formatu adnotacji Symfony używa to będzie wyglądać następująco:

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

Po zmianie TableName do MSSQL Format wszystko działało zgodnie z oczekiwaniami.