在Doctrine中,如何从更新模式命令中忽略特定的列? [英] In Doctrine, how to ignore specific column from update schema command?
问题描述
我有一个映射的实体,名为产品,只有两列: id
和名称
。
I have my mapped entity named Product, with just two columns: id
and name
.
如果我手动添加另一列,即 stock_qty
直接用当然,SQL语句,架构更新工具将对其进行远程。
If I add another column manually, i.e. stock_qty
directly with an SQL statement, the schema update tool will remote it, of course.
如何防止Doctrine删除未映射到我的自定义列实体吗?
How can I prevent Doctrine remove my custom columns, not mapped to my entity?
相关问题: https: //github.com/doctrine/doctrine2/issues/6434
推荐答案
您可以定义 onSchemaColumnDefinition 或 onSchemaAlterTableRemoveColumn 事件并忽略这些列。
You can define either a onSchemaColumnDefinition or a onSchemaAlterTableRemoveColumn event and ignore these columns.
使用onSchemaAlterTableRemoveColumn事件
Using the onSchemaAlterTableRemoveColumn Event
在捆绑包中,创建例如。 src / AppBundle / EventListener / MyEventListener.php:
In your bundle, create eg. src/AppBundle/EventListener/MyEventListener.php:
namespace AppBundle\EventListener;
use Doctrine\DBAL\Event\SchemaColumnDefinitionEventArgs;
use Doctrine\DBAL\Event\SchemaAlterTableRemoveColumnEventArgs;
class MyEventListener
{
public function onSchemaAlterTableRemoveColumn(SchemaAlterTableRemoveColumnEventArgs $args)
{
$tableColumn = $args->getColumn();
$table = $args->getTableDiff();
if($table->name == 'tableName' && $tableColumn->getName() == 'columnName') {
$args->preventDefault();
}
}
}
然后,注册事件监听器在您的服务中:
Then, register your event listener in your services:
services:
AppBundle\EventListener\MyEventListener:
tags:
- { name: doctrine.event_listener, event: onSchemaAlterTableRemoveColumn }
类似,您可以执行以下操作:
Similar, you could do this:
使用onSchemaColumnDefinition事件
Using the onSchemaColumnDefinition Event
在您的捆绑,创建例如src / AppBundle / EventListener / MyEventListener.php:
In your bundle, create eg. src/AppBundle/EventListener/MyEventListener.php:
namespace AppBundle\EventListener;
use Doctrine\DBAL\Event\SchemaColumnDefinitionEventArgs;
use Doctrine\DBAL\Event\SchemaAlterTableRemoveColumnEventArgs;
class MyEventListener
{
public function onSchemaColumnDefinition(SchemaColumnDefinitionEventArgs $args)
{
$tableColumn = $args->getTableColumn();
$table = $args->getTable();
if($table == 'tableName' && $tableColumn['Field'] == 'columnName') {
$args->preventDefault();
}
}
}
然后,注册事件监听器在您的 services.yml 中:
Then, register your event listener in your services.yml:
services:
AppBundle\EventListener\MyEventListener:
tags:
- { name: doctrine.event_listener, event: onSchemaColumnDefinition }
运行时:
php bin/console doctrine:schema:update --force
应忽略指定的列。 (在这种情况下, tableName。 columnName将不会被删除)
should ignore the specified column(s). ("tableName"."columnName" in this case will not be deleted)
引用:
这篇关于在Doctrine中,如何从更新模式命令中忽略特定的列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!