2017-03-01 64 views
6

Mam świeżą instalację Symfony 2.8, z doktryną i stosem MySQL 5.6.Aktualizacja schematu doktryny zawsze próbuj dodać NOT NULL

po wykonaniu doctrine:schema:update --force widzę
Database schema updated successfully! "x" queries were executed

Oto mój problem: Nawet jeśli mogę wykonać to wielokrotność czasu, doktryna zawsze znaleźć różnice schematu.

Z --dump-sql, widzę, że wszystkie te pytania są związane z:

  • dodanie NOT NULL na ciąg klucz podstawowy
  • dodanie NOT NULL na datetime dziedzinie

Jednak, gdy sprawdzam moją bazę danych, te kolumny mają już wartość NOT NULL.

Oto przykład na jednym nieruchomość/kolumny:

class MyEntity 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="string", length=5, name="cd_key") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $code; 
    ... 

Tutaj jest wynikiem SHOW CREATE TABLE my_entity;:

CREATE TABLE `my_entity` (
    `cd_key` varchar(5) COLLATE utf8_unicode_ci NOT NULL, 
    `label` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `number` int(11) NOT NULL, 
    PRIMARY KEY (`cd_key`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ; 

I tu doktryna zapytania staramy się wykonać za pomocą polecenia doctrine:schema:update:

ALTER TABLE my_entity CHANGE cd_key cd_key VARCHAR(5) NOT NULL; 
  • Czyszczę pamięć podręczną Symfony między każdym wykonaniem polecenia.
  • Próbuję dodać nullable=false na adnotacji @Column (zdarzenie, jeśli jest już zdefiniowane jako @ID), ale bez efektu.
  • a doctrine:schema:validate nie znajduję żadnego problemu z mapowaniem (z wyjątkiem synchronizacji kursu)
  • Próbuję upuścić i ponownie utworzyć pełną bazę danych, ale bez efektu.

Wszelkie pomysły?

+1

nie ustawiłoby opcji 'nullable = false' oznacza, że ​​dodaje ona" NOT NULL "jako część tej kolumny? Zmiana na 'nullable = true' pozwoli na wartość zerową. –

Odpowiedz

-1

Znam podobny problem. Dla mnie usunięcie tabeli przy użyciu SQL, a następnie ponownie uruchomiony DOCTRINE:SCHEMA:UPDATE --FORCE pracował dla mnie.

Wygląda na to, że ręczne wykonywanie niektórych zapytań SQL wprowadza w błąd Doktrynę.

Mówiąc to, zakładam, że dodałeś @ORM\Table(name="my_entity") i @ORM\Entity(repositoryClass="myrepository") do definicji twojej klasy;).

Mam nadzieję, że pomogło.

+0

Próbuję usunąć tabelę (nawet pełną bazę danych), ale po nowej "doktrynie: schemacie: aktualizacja", mam ten sam problem. W każdym razie dzięki za pomoc :) – n3k