Doctrine schema:update一次又一次地生成相同的SQL

时间:2017-11-11 21:08:00

标签: symfony doctrine-orm

一次又一次地运行bin/console doctrine:schema:update --force即使在清除缓存/重启php-fpm 后也始终输出39 queries executed。所以它总是一次又一次地执行相同的SQL请求......

SQL看似喜欢(来自--dump-sql

ALTER TABLE apply_queue CHANGE cv_id cv_id INT DEFAULT NULL, CHANGE team_id team_id INT DEFAULT NULL;
....

和很多类似的行。

ApplyQueue类看起来像:

/**
 * AppBundle\Entity\ApplyQueue.
 *
 * @ORM\Entity(repositoryClass="AppBundle\Entity\ApplyQueueRepository")
 * @ORM\Table(name="apply_queue")
 */
class ApplyQueue
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Cv")
     * @ORM\JoinColumn(name="cv_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $cv;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Team")
     * @ORM\JoinColumn(name="team_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $team;

    ...

}

DBAL config:

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset: utf8mb4
        default_table_options:
            charset: utf8mb4
            collate: utf8mb4_unicode_ci
        types:
            json: Sonata\Doctrine\Types\JsonType
            review_status: AppBundle\Model\Enum\ReviewStatusEnumType
        mapping_types:
            review_status: string

表的结构:

enter image description here

这是一个已经升级到Symfony 3.4和MariaDB 10.2的“旧”项目。

由于

4 个答案:

答案 0 :(得分:3)

Doctrine尚不支持MariaDB 10.2,导致此问题。

请参阅关联的PR:https://github.com/doctrine/dbal/pull/2825

答案 1 :(得分:0)

几周前我遇到过类似的问题。在我的情况下,这是在更新后 --force 它显示某些列必须设置为非空 --dump-sql. 一次又一次。我不记得问题是什么,但它是这样的:

我将同一列设置为null并具有默认值。没有可能以某种方式工作的学说,但学说要求表格设计得很好。 我要说的是检查你的桌子。这种类型可能存在一些错误。古德勒克!

答案 2 :(得分:0)

检查你的数据库表类型 - 我有一个问题,数据库类型不支持尝试设置的功能原则。

也许在数据库服务器上运行sql并查看它是否“正常”/更改任何内容,然后重新运行

答案 3 :(得分:0)

在app / config / config.yml中,检查是否启用了doctrine缓存,如下所示:

doctrine:
    orm:
        metadata_cache_driver: redis

如果是这样,您将不得不刷新redis缓存:

php bin/console redis:flushdb --client=CLIENT_NAME -n