картографирование доктрины 2 — исключение для многих многих при попытке сохранить свою сторону

Я новичок в учении, и я застрял. Любая помощь будет оценена.
Я создал две сущности: Task и Group с отношением «многие ко многим», причем группа является их владельцем. Я пытался их упорствовать. Задача сохраняется, но группа создает исключение SQL.

Вот код для Task.php:

<?php

namespace AppBundle\Entity;

/**
* Task
*/
class Task
{
/**
* @var integer
*/
private $id;

/**
* @var string
*/
private $task;

/**
* @var \DateTime
*/
private $dueDate;

/**
* @var \Doctrine\Common\Collections\Collection
*/
private $groups;

/**
* Constructor
*/
public function __construct()
{
$this->groups = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set task
*
* @param string $task
*
* @return Task
*/
public function setTask($task)
{
$this->task = $task;

return $this;
}

/**
* Get task
*
* @return string
*/
public function getTask()
{
return $this->task;
}

/**
* Set dueDate
*
* @param \DateTime $dueDate
*
* @return Task
*/
public function setDueDate($dueDate)
{
$this->dueDate = $dueDate;

return $this;
}

/**
* Get dueDate
*
* @return \DateTime
*/
public function getDueDate()
{
return $this->dueDate;
}

/**
* Add group
*
* @param \AppBundle\Entity\Group $group
*
* @return Task
*/
public function addGroup(\AppBundle\Entity\Group $group)
{
$this->groups[] = $group;

return $this;
}

/**
* Remove group
*
* @param \AppBundle\Entity\Group $group
*/
public function removeGroup(\AppBundle\Entity\Group $group)
{
$this->groups->removeElement($group);
}

/**
* Get groups
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getGroups()
{
return $this->groups;
}
}

Сопоставление задач

AppBundle\Entity\Task:
type: entity
table: task
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
task:
type: string
length: 256
dueDate:
type: date
manyToMany:
groups:
targetEntity: Group
mappedBy: tasks

Group.php

    <?php

namespace AppBundle\Entity;

/**
* Group
*/
class Group
{
/**
* @var integer
*/
private $id;

/**
* @var string
*/
private $name;


/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set name
*
* @param string $name
*
* @return Group
*/
public function setName($name)
{
$this->name = $name;

return $this;
}

/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $tasks;

/**
* Constructor
*/
public function __construct()
{
$this->tasks = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
* Add task
*
* @param \AppBundle\Entity\Task $task
*
* @return Group
*/
public function addTask(\AppBundle\Entity\Task $task)
{
$this->tasks[] = $task;

return $this;
}

/**
* Add tasks
*
* @param array
*
* @return Group
*/
public function addTasks(array $tasks)
{
foreach ($tasks as $task) {
if (is_a($task, 'AppBundle\Entity\Task')) {
$this->tasks[] = $task;
}
}
return $this;
}

/**
* Remove task
*
* @param \AppBundle\Entity\Task $task
*/
public function removeTask(\AppBundle\Entity\Task $task)
{
$this->tasks->removeElement($task);
}

/**
* Get tasks
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getTasks()
{
return $this->tasks;
}
}

Групповое картирование

 AppBundle\Entity\Group:
type: entity
table: group
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
name:
type: string
manyToMany:
tasks:
targetEntity: Task
inversedBy: groups
cascade: ['persist', 'remove']

Контроллер

class DoctrineController extends Controller
{
/**
* @return \Symfony\Component\HttpFoundation\Response
*/
public function setupAction()
{
$group = new Group();
$em = $this->getDoctrine()->getManager();

$tasks = $em->getRepository('AppBundle:Task')->findAll();
$group->setName('personal');
$group->addTasks($tasks);
$em->persist($group);
$em->flush();

echo 'success';

return $this->render('AppBundle:Doctrine:setup.html.twig', array(
));
}
}

Исключение:

An exception occurred while executing 'INSERT INTO group (name) VALUES (?)' with params ["personal"]:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group (name) VALUES ('personal')' at line 1

Я думаю, что это связано с табличными ограничениями, но я не знаю, как это исправить. Я почти уверен, что в моей логике есть изъян. Если кто-то может указать мне правильное направление с быстрым исправлением и объяснением / ссылкой на статью о том, почему это работает, как это делает, я буду очень благодарен.

2

Решение

Из документации Symfony http://symfony.com/doc/current/book/doctrine.html#add-mapping-information

Будьте осторожны, чтобы имя и свойства вашего класса не отображались в
Защищенное ключевое слово SQL (например, группа или пользователь). Например, если ваш
имя класса сущности равно Group, тогда по умолчанию имя вашей таблицы будет
группа, которая приведет к ошибке SQL в некоторых движках. Смотрите Доктрины
Зарезервированная документация по ключевым словам SQL о том, как правильно избежать этих
имена. Кроме того, если вы можете выбрать схему базы данных,
просто сопоставьте другое имя таблицы или имя столбца. Смотрите Доктрины
Создание классов для базы данных и документации по сопоставлению свойств.

Проверьте документацию Doctrine для совета о том, как процитировать эти зарезервированные слова: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#quoting-reserved-words

Но, в конце концов, рекомендуется не использовать зарезервированные слова в именах классов или атрибутов классов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]