使用 docrine 模式在 symfony 中的另一列之后添加新列
Posted
技术标签:
【中文标题】使用 docrine 模式在 symfony 中的另一列之后添加新列【英文标题】:add new column after another column in symfony using docrine schema 【发布时间】: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 如果您是生产数据库,则必须手动执行。唯一的另一种方法是在文件中订购您的属性,删除表,更新架构 【参考方案1】:在 Doctrine 中,您似乎无法做到这一点。可能处理的列的选项参数不可用。无论如何,也许你可以通过(当然所有的想法都是一种变通方法)来实现:
为字段创建自定义“位置”注释,当然您需要编写自定义命令,该命令将运行doctrine:schema:update --dump-sql
并修改 sql 输出(这只是我的想法)。
使用迁移来执行此操作,您将在其中放置原始 sql
在 github here 上为 Doctrine ORM 项目创建 PR 或 Issue。
【讨论】:
以上是关于使用 docrine 模式在 symfony 中的另一列之后添加新列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Symfony 2 中进入维护模式以安全地更新生产应用程序?
在禁用调试模式的情况下对我的 Symfony 5 应用程序的 API 调用返回 CORS 错误