我在zend框架2中使用了规则2。下面是我的实体文件。问题是,当我尝试使用验证模式时,
./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方法..
发布于 2015-10-25 04:11:38
我终于想通了。OP的用例可能有所不同,但在我的例子中,这是因为配置错误的双向多对多关系。
我有以下实体:
class Cuisine {
/**
* @ManyToMany(targetEntity="Dish")
* @ORM\JoinTable(name="CuisineDish", ...)
*/
protected $dishes;
}
class Dish {
/**
* @ORM\ManyToMany(targetEntity="Cuisine")
* @ORM\JoinTable(name="CuisineDish", ...)
*/
protected $cuisines;
}缺少的是@ManyToMany注释的inversedBy和mappedBy属性。只有当关联是双向的时,才需要这些。
因此,现在正确映射的实体如下所示:
class Cuisine {
/**
* @ManyToMany(targetEntity="Dish", inversedBy="cuisines")
* @ORM\JoinTable(name="CuisineDish", )
*/
protected $dishes;
}
class Dish {
/**
* @ORM\ManyToMany(targetEntity="Cuisine", mappedBy="dishes")
* @ORM\JoinTable(name="CuisineDish", ...)
*/
protected $cuisines;
}并且orm:validate-schema不会再带着异常退出。
异常消息只是误导性的,因为此操作不会更改数据库。此外,只有在验证与数据库的同步时才会发现此问题,而不会在本应验证映射(--skip-sync)的情况下发现此问题。
发布于 2017-11-06 02:01:14
如果您想要使用已被某个已安装的包使用的表名,则可能会导致此错误消息。
https://stackoverflow.com/questions/18341692
复制相似问题