【问题标题】:Can Doctrine save fields which are reserved keys?Doctrine 可以保存保留键的字段吗?
【发布时间】:2016-01-11 15:51:20
【问题描述】:

我也有一个包含“from”、“with”列的表格。当我想坚持它时,我得到一个例外:

PDOException' 带有消息“SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行中的“from, with, fb_email, fb_id, fb_login_code, fb_hometown, fb_location, fb_tagged_”附近使用的正确语法

我担心“from”和“with”名称会导致这种情况,知道吗?

【问题讨论】:

    标签: mysql doctrine-orm


    【解决方案1】:

    Quoting Reserved Words 中所述:

    由于保留字冲突,有时需要引用列名或表名。 Doctrine 不会自动引用标识符,因为它导致的问题多于解决的问题。引用表和列名需要在定义中使用刻度明确地完成。

    <?php
    /** @Column(name="`number`", type="integer") */
    private $number;
    

    Doctrine 会根据使用的数据库平台在所有 SQL 语句中引用该列名。

    警告

    标识符引用不适用于连接列名或鉴别器列名,除非您使用自定义 QuoteStrategy

    为了更好地控制列引用,Doctrine\ORM\Mapping\QuoteStrategy 接口在 2.3 中引入。它为每个列、表、别名和其他 SQL 名称调用。您可以通过调用Doctrine\ORM\Configuration#setQuoteStrategy() 来实现并设置QuoteStrategy。

    添加了 ANSI 引用策略,它假定任何 SQL 名称都不需要引用。您可以将其与以下代码一起使用:

    <?php
    use Doctrine\ORM\Mapping\AnsiQuoteStrategy;
    
    $configuration->setQuoteStrategy(new AnsiQuoteStrategy());
    

    【讨论】:

    • 在.yml文件中如何引用?
    • @JohnSmith 在 YAML 文件中,您可以添加双引号刻度。例如。 " ` column_name ` "
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多