【问题标题】:doctrine:schema:update doesn't respect column order学说:架构:更新不尊重列顺序
【发布时间】:2014-07-31 15:55:05
【问题描述】:

我在 Symfony2 中有这个 Entity

<?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;
}

我在 {{userId}} 和 {{test}} 之间添加以下行:

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

然后我在控制台中执行:

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

它给了我回应:

ALTER TABLE users ADD superbanana INT NOT NULL

**我该怎么做呢? **

ALTER TABLE users ADD superbanana INT NOT NULL AFTER user_id

【问题讨论】:

  • Doctrine 不处理字段顺序(即使对于相关字段,它们也会始终附加);如果它对您很重要,并且在更新架构之前您的表中没有任何数据,请运行 php app/console doctrine:schema:drop 然后运行 ​​php app/console doctrine:schema:create

标签: php mysql symfony doctrine-orm


【解决方案1】:

如果您不想删除/创建表,可以使用@columnDefinition 属性并自己定义列定义。

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

【讨论】:

  • 我不认为 CREATE 支持 AFTER
  • 是的@Natdrip:CREATE 不支持 AFTER 但 ALTER 支持 AFTER
【解决方案2】:

我认为这是不可能的,因为使用 Doctrine 意味着您不再关心 Table 的管理方式(显然之前有人 tried it)。

而且由于您从不直接使用 MySQL,我认为没有实用程序可以为 Doctrine 指定列顺序。

但是你可以随时删除你的表,这样 Doctrine 将完全重建表,尊重你的顺序。

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 2017-10-19
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多