gpt4 book ai didi

php - Symfony2,Doctrine2 - 强制更新 - 表已经存在于多对多关系中

转载 作者:IT王子 更新时间:2023-10-28 23:53:11 26 4
gpt4 key购买 nike

在我成功创建具有类别和任务之间的一对多关系的 TaskBundle 之后,现在我正在尝试创建一个具有多对多关系的新 TaskBundle。我在这种关系中检查复选框也遇到问题,但现在它不是主要问题(也许在解决这个问题之后)。我删除了所有表,这是 TaskBundle 使用并尝试创建一个新表,但这是问题(底部的描述)。

我的任务对象:

<?php

namespace Acme\TaskBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
* @ORM\Entity
* @ORM\Table(name="tasks")
*/
class Task
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string", length=200)
* @Assert\NotBlank(
* message = "Task is empty"
* )
* @Assert\Length(
* min = "3",
* minMessage = "Task is too short"
* )
*/
protected $task;

/**
* @ORM\Column(type="datetime")
* @Assert\NotBlank()
* @Assert\Type("\DateTime")
*/
protected $dueDate;

/**
* @Assert\True(message = "You have to agree.")
*/
protected $accepted;

/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="tasks")
* @ORM\JoinTable(name="categories")
*/
protected $category;

/**
* Constructor
*/
public function __construct()
{
$this->category = 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 category
*
* @param \Acme\TaskBundle\Entity\Category $category
* @return Task
*/
public function addCategory(\Acme\TaskBundle\Entity\Category $category)
{
$this->category[] = $category;

return $this;
}

/**
* Remove category
*
* @param \Acme\TaskBundle\Entity\Category $category
*/
public function removeCategory(\Acme\TaskBundle\Entity\Category $category)
{
$this->category->removeElement($category);
}

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

和类别对象

<?php

namespace Acme\TaskBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
* @ORM\Entity
* @ORM\Table(name="categories")
*/
class Category
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string", length=200, unique=true)
* @Assert\NotNull(message="Categories cannot be empty", groups = {"adding"})
*/
protected $name;

/**
* @ORM\ManyToMany(targetEntity="Task", mappedBy="category")
*/
private $tasks;


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

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

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

return $this;
}

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

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

return $this;
}

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

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

所以,在我输入 doctrine:schema:update --force 之后,我会得到错误:Table 'symfony.categories' 已经存在。我试图删除所有缓存,但同样的问题。有什么想法吗?

只有m2m关系才有问题。

PS:我在谷歌上找过这个问题,但是没有人回答这个问题。只有问题,但没有正确答案,问题出在哪里以及如何解决。

最佳答案

看起来您在该数据库中已有名为“categories”的表。删除此行 @ORM\JoinTable(name="categories") 并尝试不使用它。

附言“类别”对于连接表来说真是一个奇怪的名字。您可能应该遵循一些约定并让学说命名。连接表的常用名称是 category_taskcategory2task,因为它们更容易解释。没什么那么重要,只是想提出我认为好的做法。

关于php - Symfony2,Doctrine2 - 强制更新 - 表已经存在于多对多关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19070458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com