Doctrine orm 表已存在
我在zend框架2中使用了条令2。下面是我的实体文件。问题是,当我尝试使用Doctrine orm 表已存在,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我在zend框架2中使用了条令2。下面是我的实体文件。问题是,当我尝试使用 ./vendor/bin/doctrine-module orm:validate-schema 指挥部 我犯了一个错误 [Doctrine\DBAL\Schema\SchemaException] The table with name 'database.opportunitycriteria' already exists. 我该怎么办 namesp
./vendor/bin/doctrine-module orm:validate-schema
指挥部
我犯了一个错误
[Doctrine\DBAL\Schema\SchemaException]
The table with name 'database.opportunitycriteria' already exists.
我该怎么办
namespace Administration\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* OpportunityCriteria
*
* @ORM\Table(name="OpportunityCriteria")
* @ORM\Entity
*/
class Criteria
{
/**
* @var integer
* @ORM\Id
* @ORM\Column(name="criteria_id", type="integer", nullable=false)
*/
private $criteria_id;
/**
* @var string
*
* @ORM\Column(name="description", type="string", nullable=false)
*/
private $description;
}
以及合适的getter和setter方法。我终于找到了答案。OP的用例可能不同,但在我的例子中,这是因为错误配置了双向多对多关系 我拥有以下实体:
高级烹饪{
/**
*@ManyToMany(targetEntity=“Dish”)
*@ORM\JoinTable(name=“CuisineDish”,…)
*/
受保护的盘子;
}
班菜{
/**
*@ORM\ManyToMany(targetEntity=“烹饪”)
*@ORM\JoinTable(name=“CuisineDish”,…)
*/
受保护的美食;
}
缺少的是@manytomy
注释的inversedBy
和mappedBy
属性。仅当关联是双向的时才需要这些
因此,现在正确映射的实体如下所示:
高级烹饪{
/**
*@ManyToMany(targetEntity=“Dish”,反过来是=“cuisines”)
*@ORM\JoinTable(name=“CuisineDish”,)
*/
受保护的盘子;
}
班菜{
/**
*@ORM\ManyToMany(targetEntity=“courine”,mappedBy=“dishers”)
*@ORM\JoinTable(name=“CuisineDish”,…)
*/
受保护的美食;
}
并且,orm:validate schema
不再以异常退出
异常消息只是误导,因为此操作不会更改数据库。此外,只有在验证与数据库的同步时,才发现此问题,而不是仅在验证映射时(--skip sync
)才发现此问题
我只是。如果您想使用一个已安装的捆绑包使用的表名,可能会导致此错误消息。是否有一个名为OpportunityCriteria的实体类?从外观上看,这只是意味着在某些实体类中,此行在@ORM\table(name)中重复了一次以上=“OpportunityCriteria”)现在,当我们使用Copy/paste编写代码时,这种错误通常会发生。我得到了这个错误,在实体目录中搜索@ORM\Table时,只会显示一个出现问题的表的名称。(这种错误通常发生在假设情况下。)能否请您提供
composer.json
,以便我可以回答这个问题?Ping@Benjamin,您可以提供您的用例数据吗?