我正在使用 Symfony 5,并且在迁移时遇到了一些问题。
我正确创建了模型,所有迁移都通过了。
只是为了检查我跑步:
./bin/console doctrine:schema:vaidate
这告诉我映射没问题,但是对于数据库:
The database schema is not in sync with the current mapping file.
所以我跑
./bin/console doctrine:schema:update --dump-sql
看看我错过了什么,它给了我:
ALTER TABLE user CHANGE orders_id orders_id INT DEFAULT NULL;
ALTER TABLE user CHANGE cart_id cart_id INT DEFAULT NULL;
ALTER TABLE USER CHANGE roles roles JSON NOT NULL;
ALTER TABLE characteristic CHANGE color color VARCHAR(255) DEFAULT NULL;
问题是,我从来没有要求进行这些更改,例如,当我们将颜色更改为颜色时,它们似乎没有意义。
我尝试清理缓存:
./bin/console cache:clear
./bin/console doctrine:cache:clear-metadata
./bin/console doctrine:cache:clear-query
./bin/console doctrine:cache:clear-result
并运行 schema validate 命令,但输出仍然相同。
我还尝试使用
./bin/console d:m:diff
为这些更改生成迁移,然后执行此迁移,它执行得很好,但 doctrine:schema:validate
仍然给我一个错误。
我还在
doctrine.yaml
和 .env
文件中更新了我的 server_version,因为默认值为 5.7,我使用的是 mariadb 10.3
有人知道我缺少什么吗?谢谢你的帮助
我的配置
.env
文件:
###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use:
"sqlite:///%kernel.project_dir%/var/data.db"
# For a PostgreSQL database, use:
"postgresql://db_user:[email protected]:5432/db_name serverVersion=11&charset=utf8"
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
DATABASE_URL=mysql://root:@mariadb:3306/ecommerce_db?serverVersion=10.3
###< doctrine/doctrine-bundle ###
和
doctrine.yaml
:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
server_version: '10.3'
# IMPORTANT: You MUST configure your server version,
# either here or in the DATABASE_URL env var (see .env file)
#server_version: '5.7'
orm:
auto_generate_proxy_classes: true
naming_strategy:
doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
导致用户实体出现问题的字段:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Order", inversedBy="users")
*/
private $orders;
/**
* @ORM\OneToOne(targetEntity="App\Entity\Cart", cascade={"persist", "remove"})
*/
private $cart;
/**
* @ORM\Column(type="json")
*/
private $roles = [];
来自特征实体:
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Groups({"product.read"})
*/
private $color;
更新:
我也尝试过:
转储数据库:
./bin/console d:d:d --force
清理所有缓存:
./bin/console cache:clear
./bin/console doctrine:cache:clear-metadata
./bin/console doctrine:cache:clear-query
./bin/console doctrine:cache:clear-result
重新创建数据库:
./bin/console d:d:c
清理迁移,仅保留表创建并使用以下命令重新启动所有内容:
./bin/console doctrine:migrations:migrate
仍然收到相同的错误消息
当您第一次初始化项目时,您需要根据文档:
在.env文件中设置数据库的连接参数(例如,对于postgresql)DATABASE_URL="postgresql://db_user:[email protected]:5432/db_name?serverVersion=12.19 (Debian 12.19-1.pgdg120+1)&charset=utf8"
例如,要使用 OSPanel 6 连接到 postgresql,配置如下:
DATABASE_URL="postgresql://postgres:@PostgreSQL-16/symfony?serverVersion=16.1&charset=utf8"
然后您需要执行以下命令:
symfony console doctrine:database:create --if-not-exists
symfony console doctrine:migrations:diff
symfony console doctrine:migration:migrate
命令:
symfony console doctrine:schema:validate -v
将显示以下结果:
打开文件�