原则架构:更新一次又一次生成相同的SQL

sf_*_*anb 6 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;
....
Run Code Online (Sandbox Code Playgroud)

和很多类似的行。

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;

    ...
Run Code Online (Sandbox Code Playgroud)

}

DBAL 配置:

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
Run Code Online (Sandbox Code Playgroud)

表的结构:

在此处输入图片说明

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

谢谢

sf_*_*anb 3

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

请参阅链接的 PR:https ://github.com/doctrine/dbal/pull/2825