MySql的引用和引用保留字

问题描述 投票:0回答:1

我在MySql数据库的Symfony 4.3项目实体中有名为Group和table group的实体。组是保留字。我有3个实体:用户,组,用户组。它们具有关系:用户-> OneToMany->用户组和组-> OneToMany->用户组(UserGroup具有其他属性,因此我不能使用ManyToMany关系)。当我尝试获取ID = 1的用户的组名时:

$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]:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在行1的'group t0 WHERE t0.id = 1'附近使用,代码为0

文档(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#quoting-reserved-words中有一个配方,如何启用对保留字的引用:

<?php
use Doctrine\ORM\Mapping\AnsiQuoteStrategy;

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

我不知道我必须在哪里使用此代码-在EntityManager中,在Controller中?以及如何获得$ configuration?

doctrine-orm doctrine symfony4
1个回答
0
投票

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

<?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

# config/packages/doctrine.yml

doctrine:
    # ...
    orm:
        quote_strategy: doctrine.orm.quote_strategy.default
© www.soinside.com 2019 - 2024. All rights reserved.