Je suis nouveau à la doctrine et je suis resté coincé. Toute aide serait appréciée. J'ai créé deux entités: Tâche et Groupe avec une relation plusieurs à plusieurs avec le groupe étant le côté propriétaire. J'ai essayé de les persister. La tâche est conservée, mais le groupe jette une exception SQL.Doctrine 2 Mappage - De nombreuses exceptions à Thows en essayant de persister à posséder le côté
Voici le code pour 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;
}
}
cartographie des tâches
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;
}
}
cartographie Groupe
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']
Le contrôleur
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(
));
}
}
L'exception:
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
Je pense qu'il a à faire avec des contraintes de table, mais je ne savoir comment le réparer. Je suis presque sûr qu'il y a un défaut dans ma logique. Si quelqu'un peut me diriger dans la bonne direction avec une solution rapide et une explication/un lien vers un article expliquant pourquoi cela fonctionne comme ça, je serai très reconnaissant.
Vous utilisez un mot réservé comme nom de table 'group' et comme doctrine n'échappe pas au nom, vous obtenez cette erreur. – Artamiel