微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在学说迁移中转义反斜杠

如何解决在学说迁移中转义反斜杠

我有一个名为 Entity 的表。它有一个包含实体命名空间的字段,如下所示:

Old\App\Email 我正在尝试将其重命名New\App\Email

我得到了这个有效的 sql 查询重命名 MysqL 控制台中的所有行。它在条件中需要 4 个 \,在 \ 中需要 2 个 REPLACE

UPDATE Entity SET entity_name = REPLACE(entity_name,'Old\\App','New\\App') WHERE entity_name LIKE 'Old\\\\App%';

让它正常工作已经很难逃脱,但是现在尝试将它添加Doctrine Migration

$this->addsql('update log set entity_name = replace(entity_name,\'Old\',\'New\') where entity_name like \'Old\App%\'');

它在不做任何更改的情况下执行。我认为它没有正确逃脱。 我已经尝试了从 4 个反斜杠转义的所有组合。甚至尝试了引用转义的不同组合,希望这会产生预期的转义,但根本没有更改任何行

$this->addsql('update Entity set entity_name = replace(entity_name,\'New1\') where entity_name like \'Old\App%\'');
$this->addsql('update Entity set entity_name = replace(entity_name,\'New2\') where entity_name like \'Old\\App%\'');
$this->addsql('update Entity set entity_name = replace(entity_name,\'New3\') where entity_name like \'Old\\\App%\'');
$this->addsql('update Entity set entity_name = replace(entity_name,\'New4\') where entity_name like \'Old\\\\App%\'');

$this->addsql('update Entity set entity_name = replace(entity_name,"Old","New5") where entity_name like "Old\App%"');
$this->addsql('update Entity set entity_name = replace(entity_name,"New6") where entity_name like "Old\\App%"');
$this->addsql('update Entity set entity_name = replace(entity_name,"New7") where entity_name like "Old\\\App%"');
$this->addsql('update Entity set entity_name = replace(entity_name,"New8") where entity_name like "Old\\\\App%"');

感谢其他程序员的帮助。

教义版本为 2.7

解决方法

它并不漂亮,但它在 where 子句中需要 7 或 8 个 \,在替换函数中需要 4 个,用双引号和单引号括起来的搜索字符串:

$this->addSql("update Entity set entity_name = replace(entity_name,'Old\\\\App','New\\\\App') where entity_name like 'Old\\\\\\\\App%'");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。