首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql的原则与保留字的引用

MySql的原则与保留字的引用
EN

Stack Overflow用户
提问于 2019-10-10 20:33:46
回答 1查看 859关注 0票数 0

在我的symfony4.3项目中,我在MySql数据库中有一个名为Group和table group的实体。Group是保留字。我有3个实体:用户、组、UserGroup。它们有关系: User -> OneToMany -> UserGroup和Group -> OneToMany -> UserGroup ( UserGroup有额外的属性,所以我不能使用ManyToMany关系)。当我尝试使用id=1获取用户的组名时:

代码语言:javascript
复制
$entityManager = $this->getDoctrine()->getManager();
   $user = $entityManager->getRepository(User::class)
        ->find($id);
   $groups = $user->getUserGroups();

   foreach ($groups as $group) {
        $group_name = $group->getGroupId()->getName();
        echo $group_name, '<br>';
    }

我收到错误消息:

你有一个错误:执行'SELECT t0.id AS id_1,t0.name AS name_2 FROM group t0 WHERE t0.id = ?‘时出现异常。使用参数1: SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解正确的语法,以便在代码为0的第1行附近使用'group t0 WHERE t0.id = 1‘

文档(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#quoting-reserved-words)中提供了如何启用保留字引号的方法:

代码语言:javascript
复制
<?php
use Doctrine\ORM\Mapping\AnsiQuoteStrategy;

$configuration->setQuoteStrategy(new AnsiQuoteStrategy()); 

我不明白我必须在哪里使用这段代码-在EntityManager中,还是在控制器中?我怎样才能得到$configuration呢?

EN

回答 1

Stack Overflow用户

发布于 2019-10-13 17:31:10

我认为更好的解决方案是在Doctrine Documentation中提到的实体定义中使用记号。

代码语言:javascript
复制
<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\GroupRepository")
 * @ORM\Table(name="`group`")
 */
class Group
{
    // ...
}

请注意,仅当您使用默认报价策略时,此方法才有效。因此,请删除quote_strategy参数或将其设置为doctrine.orm.quote_strategy.default

代码语言:javascript
复制
# config/packages/doctrine.yml

doctrine:
    # ...
    orm:
        quote_strategy: doctrine.orm.quote_strategy.default
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58322996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档