2014-06-10 23 views
7

mam ten Entity w Symfony2:doktryna: schema: aktualizacja nie respektować kolejność kolumn

<?php 

namespace Project\UserBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Users 
* 
* @ORM\Table(name="users") 
* @ORM\Entity 
*/ 
class Users 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="user_id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $userId; 


    /** 
    * @var integer 
    * 
    * @ORM\Column(name="test", type="integer", nullable=false) 
    */ 
    private $test; 
} 

dodać następujący wiersz między {{userId}} i {{}} Test:

/** 
* @var integer 
* 
* @ORM\Column(name="superbanana", type="integer", nullable=false) 
*/ 
private $superbanana; 

Potem wykonać w konsoli:

php app/console doctrine:schema:update --dump-sql 

To da mi odpowiedź:

ALTER TABLE users ADD superbanana INT NOT NULL 

** Jak mogę to zrobić zamiast tego? **

ALTER TABLE users ADD superbanana INT NOT NULL AFTER user_id 
+0

Doktryna nie obsługuje kolejności w terenie (nawet w przypadku powiązanych pól, będą one zawsze dołączane); Jeśli jest to dla ciebie ważne i nie masz żadnych danych w tabelach przed aktualizacją schematu uruchom 'php app/console doctrine: schema: drop' uruchom' php app/console doctrine: schema: create' – Javad

Odpowiedz

12

Jeśli nie chcesz upuszczać/tworzyć tabelę, możesz użyć atrybutu @columnDefinition i samodzielnie zdefiniować kolumnę.

/** 
* @var integer 
* 
* @ORM\Column(type="integer", columnDefinition="INT NOT NULL AFTER `user_id`") 
*/ 
private $superbanana; 
+1

Nie sądzę CREATE Supports AFTER – Natdrip

+0

yes @Natdrip: CREATE nie obsługuje AFTER, ale ALTER obsługuje AFTER – Nolwennig

1

Nie sądzę, jest to możliwe, ponieważ stosując doktrynę oznacza, że ​​nie dbają o jak tabela jest już udało (widocznie ktoś tried it wcześniej).

A ponieważ nigdy nie używasz bezpośrednio MySQL, myślę, że nie ma narzędzia do określania zamówień kolumn dla Doctrine.

Ale zawsze możesz usunąć swój stół, aby Doctrine całkowicie odbudował tabelę, respektując twoje zamówienie.

Powiązane problemy