Я пытаюсь настроить Doctrine2 внутри моего проекта, он работает нормально, но у меня возникла проблема при создании схемы с параметром столбцов: «unique = true»
моя сущность:
<?php
namespace Entities\Test;
/**
* @Entity(repositoryClass="")
* @Table(name="test")
*/
Class Test {
/**
* @Id
* @Column(type="integer",unique=true, nullable=false)
*/
private $id;
/**
* @Column(type="string", length=32, unique=true, nullable=false)
*/
private $test;
}
Затем я просто использую консольную команду:
orm:schema-tool:update --dump-sql
Он возвращает хороший SQL:
CREATE TABLE test (id INT NOT NULL, test NVARCHAR(32) NOT NULL, PRIMARY KEY (id));
CREATE UNIQUE INDEX UNIQ_D87F7E0CBF396750 ON test (id) WHERE id IS NOT NULL;
CREATE UNIQUE INDEX UNIQ_D87F7E0CD87F7E0C ON test (test) WHERE test IS NOT NULL;
Но когда я выполняю его (—force), я получаю ошибку:
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'CREATE UNIQUE INDEX UNIQ_D87F7E0CBF3
96750 ON test (id) WHERE id IS NOT NULL':
SQLSTATE [42000, 156]: [Microsoft][SQL Server Native Client 11.0][SQL Serve
r]Syntaxe incorrecte vers le mot cl▒ 'WHERE'.
Кажется, что этот синтаксис для SQLServer> = 2008, но я работаю с SQLServer2005, поэтому я добавил хорошую платформу в свой массив параметров:
$conn = array(
'driver' => 'sqlsrv',
'user' => '****_dev',
'password' => '*******',
'host' => '*.*.*.*',
'dbname' => 'dbname',
'platform' => new Doctrine\DBAL\Platforms\SQLServer2005Platform(),
);
$this->em = EntityManager::create($conn, $config);
Но это ничего не меняет в коде SQL, у меня все еще есть этот «неправильный синтаксис около ГДЕ»
Я работаю с последней стабильной версией доктрины, загруженной с помощью composer, и я попробовал ее в новом чистом проекте, он все тот же, я много искал похожую проблему, но ничего не нашел, думаю, что-то упустил.
Любая помощь приветствуется !
Спасибо, что читаете меня.
Я нашел способ это исправить, но меня это не устраивает,
Я только что прокомментировал эти строки в Doctrine \ DBAL \ Platforms \ SQLServerPlatform.php
public function getCreateIndexSQL(Index $index, $table)
{
$constraint = parent::getCreateIndexSQL($index, $table);
// if ($index->isUnique() && !$index->isPrimary()) {
// $constraint = $this->_appendUniqueConstraintDefinition($constraint, $index);
// }
return $constraint;
Других решений пока нет …