【发布时间】:2016-05-15 05:41:05
【问题描述】:
我目前正在开发一个实现 OpenCart 数据库的 Symfony 2.8 项目。我已经设置了一些映射,以便能够提取客户/地址/订单详细信息,到目前为止似乎还可以。
但是,在我为定制表更改实体中的某些内容后,我尝试 --force 更新我的数据库并收到以下错误:
[Doctrine\DBAL\Exception\DriverException] 发生异常 在执行 'ALTER TABLE oc73_customer CHANGE address_id address_id VARCHAR(255) NOT NULL': SQLSTATE[HY000]: 一般 错误:1832 无法更改列“address_id”:用于外键 约束'FK_B25E4F72F5B7AF75'
[Doctrine\DBAL\Driver\PDOException] SQLSTATE[HY000]:一般错误: 1832 无法更改列“address_id”:在外键中使用 约束'FK_B25E4F72F5B7AF75'
我的更新似乎是在我将 oc73_customer 中的 address_id 更改为 VARCHAR 后,将其更改为 INT 以匹配外键。我检查我的实体(Oc73Customer):
/**
* @var integer
*
* @ORM\Column(name="address_id", type="integer")
*/
private $addressId;
在我的 oc73_address 表中,我的实体条目:
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(name="address_id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $addressId;
它也设置为整数 - 那么为什么我的更新不断尝试将我的 oc73_customer 表中的 address_id 更改为 VARCHAR?我在代码中找不到它应该是的任何地方?
如果有帮助,这里是我的 config.yml:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
schema_filter: ~^(?!oc73_simple_*)~
mapping_types:
enum: string
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
非常感谢您对此提供的任何帮助 - 使用 Doctrine 和 Symfony 处理 OpenCart 数据库似乎真的很让人头疼。
谢谢 迈克尔
【问题讨论】:
-
addresId 不应该是这样的映射字段吗?:
/** * @var Address * * @ORM\OneToOne(targetEntity="Address", cascade={"persist"}) */ private $address;无论如何,回到主题,您是否尝试删除整个数据库(如果可以的话)并从头开始创建 -
不,我不能真正删除数据库,但我想我可能刚刚解决了它 - 我相信这是一个缓存问题。
标签: mysql symfony doctrine-orm