Symfony dice ser multiplataforma y que toda su configuracion está basada en la aislacion de la base de datos que uses para que puedas cambiar el motor cuando se te antoje; por lo tanto deberia de funcionar bajo cualquier motor de base de datos solo configurando , lamentablemente no es así y tenes que modificar muchas otras cosas para que te funcione con sql server.
Si PHP está casado con MySQL que Symfony haga lo que dice ser o que deje de vender algo que no es.
Al margen de esto hay muchas empresas que poseen la licencia de SQL Server y son amantes del mismo (no es mi caso, yo prefiero Oracle) y deberían de poder seguir usando su producto en vez de mysql que si bien es bueno no tiene la potencia que tienen los otros.
El DBLIB dice que es para linux... si tienes windows utiliza lo siguiente:
Las extensiones que tengo son las siguientes (Conste que tengo varios proyectos de symfony con diferentes motores, tal vez no necesites todas las que yo):
;extension=php_bz2.dll
;extension=php_curl.dll
extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_exif.dll
;extension=php_fdf.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_ifx.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
extension=php_msql.dll
extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
extension=php_pdo.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_soap.dll
;extension=php_sockets.dll
;extension=php_sqlite.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
extension=php_xmlrpc.dll
extension=php_xsl.dll
;extension=php_zip.dll
extension=php_sqlsrv_ts.dll
(La ultima la baje desde la página de microsoft, dice solucionar varios problemas entre sqlserver 2005/08 con PHP)
- Luego Configura los archivos propel.ini y database.yml de la siguiente manera:
DATABASE.YML:
dev:
propel:
param:
classname: DebugPDO
test:
propel:
param:
classname: DebugPDO
all:
propel:
class: sfPropelDatabase
param:
phptype: mssql
classname: PropelPDO
dsn: 'mssql:host=<Direccion del Servidor>;dbname=<Nombre de la Base>'
username: <usuario>
password: <contraseña>
encoding: utf8
persistent: true
pooling: true
options: none
PROPEL.INI:
propel.targetPackage = lib.model
propel.packageObjectModel = true
propel.project = <Nombre del proyecto>
propel.database = mssql
propel.database.driver = mssql
propel.database.url = 'mssql:host=<direccion del Servidor>;dbname=<Nombre de la Base>'
propel.database.creole.url = ${propel.database.url}
propel.database.user = <usuario>
propel.database.password = <password>
propel.database.encoding = utf8
propel.dateTimeClass = MssqlDateTime
-Se debe bajar de la página de creole, (
http://creole.phpdb.org/trac/wiki/Users/Download), la última versión y descomprimirla dentro de una carpeta llamada "creole"
en "<proyecto>\lib\vendor\symfony\lib\plugins\sfPropelPlugin\lib\vendor\propel\".
-se debe comentar la linea "$con->exec("SET NAMES '" . $charset . "'");" con "//" delante del archivo "<proyecto>\lib\vendor\symfony\lib\plugins\sfPropelPlugin\lib\vendor\propel\adapter\DBAdapter.php"
-Se debe colocar el siguiente código en la linea 273 de:
<PROYECTO>\lib\vendor\symfony\lib\plugins\sfPropelPlugin\lib\vendor\propel\util\BasePeer.php
if (!$criteria->keyContainsValue($pk->getFullyQualifiedName())) {
$newQualifiedCols = array();
foreach ($qualifiedCols as $qualifiedCol) {
if(trim($qualifiedCol) != trim($pk->getFullyQualifiedName())) {
$newQualifiedCols[] = $qualifiedCol;
}
}
$qualifiedCols = $newQualifiedCols;
}
(Esto se realiza para que no tome las claves autonuméricas y las pase como null.)
Luego debes seguir los pasos del link que te envie anteriormente:
para modificar los archivos debugpdo.php con el contenido del archivo MSSqlDebugPDO.php.
Modificar el archivo PropelPDO.php con el contenido de MSSqlPropelPDO.php
Crear el archivo que contiene la clase MssqlDateTime tal y como lo dice el link.
(para este ultimo debes agregar el archivo que contiene la clase en el archivo propel.php.
(Todo esto lo vas a encontrar entrando en los links del link anterior).
Con todo esto a mi me anda perfectamente, sin ningún tipo de problemas a excepcion de que tengo que generar los alias a mano en las funciones doSelectJoinAll generadas automaticamente porque SQLServer tira error al colocar en el select dos campos con el mismo nombre.
Espero que te sirva, cualquier cosa avisame y los vemos la particularidades o problemas que aparezcan.
Saludos.
Marcelo.