数据库架构与当前映射文件不同步

问题描述 投票:0回答:1

我正在使用 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 

仍然收到相同的错误消息

symfony orm doctrine symfony5
1个回答
0
投票

当您第一次初始化项目时,您需要根据文档

在.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

将显示以下结果:

result run commands

打开文件�

© www.soinside.com 2019 - 2024. All rights reserved.