【问题标题】:add new column after another column in symfony using docrine schema使用 docrine 模式在 symfony 中的另一列之后添加新列
【发布时间】:2020-08-24 12:48:09
【问题描述】:

代码

房间桌子的实体。

use Doctrine\ORM\Mapping as ORM;

class Room
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(type="string")
     */
    private $name;

   /**
     * @var int
     *
     * @ORM\Column(type="integer")
     */
    private $groupOrder;

    /**
     * @var boolean
     *
     * @ORM\Column(type="boolean", options={"after": "active","default": false})
     */
    private $isAssociable;

    /**
     * @var bool
     *
     * @ORM\Column(type="boolean", options={"default" : 1})
     */
    private $active = true;

    /**
     * @var \DateTime
     *
     * @ORM\Column(type="datetime")
     */
    private $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(type="datetime")
     */
    private $updatedAt;
}

我正在控制台上运行以下命令,但输出不符合预期

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

预期输出

ALTER TABLE room ADD is_associable TINYINT(1) DEFAULT '0' NOT NULL 活动后;

我得到了什么(输出)

ALTER TABLE room ADD is_associable TINYINT(1) DEFAULT '0' NOT NULL;

【问题讨论】:

  • Doctrine 不支持这一点,因为“...Doctrine 被构建为尽可能与数据存储无关。从数据的角度来看,放置新列并不重要是否处于特定位置,......”
  • @JasonStephenson 除了迁移之外还有什么替代方法吗?
  • 我不知道,除非你在教义之外手动操作,抱歉
  • 我想我应该通过迁移来做到这一点:P,谢谢@JasonStephenson
  • 如果您是生产数据库,则必须手动执行。唯一的另一种方法是在文件中订购您的属性,删除表,更新架构

标签: php sql symfony doctrine-orm


【解决方案1】:

在 Doctrine 中,您似乎无法做到这一点。可能处理的列的选项参数不可用。无论如何,也许你可以通过(当然所有的想法都是一种变通方法)来实现:

  • 为字段创建自定义“位置”注释,当然您需要编写自定义命令,该命令将运行doctrine:schema:update --dump-sql 并修改 sql 输出(这只是我的想法)。

  • 使用迁移来执行此操作,您将在其中放置原始 sql

  • 在 github here 上为 Doctrine ORM 项目创建 PR 或 Issue。

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2020-03-08
    相关资源
    最近更新 更多