在我的symfony4.3项目中,我在MySql数据库中有一个名为Group和table group的实体。Group是保留字。我有3个实体:用户、组、UserGroup。它们有关系: User -> OneToMany -> UserGroup和Group -> OneToMany -> UserGroup ( 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: 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)中提供了如何启用保留字引号的方法:
<?php
use Doctrine\ORM\Mapping\AnsiQuoteStrategy;
$configuration->setQuoteStrategy(new AnsiQuoteStrategy()); 我不明白我必须在哪里使用这段代码-在EntityManager中,还是在控制器中?我怎样才能得到$configuration呢?
发布于 2019-10-13 17:31:10
我认为更好的解决方案是在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.defaulthttps://stackoverflow.com/questions/58322996
复制相似问题