Symfony和Doctrine进行迁移但没有效果

7

Doctrine 在 Symfony 中生成迁移,并在运行迁移后没有任何更改,因此在下一次对比时仍然相同。如何让 Doctrine 不生成此迁移?手动运行 alter table 命令无法移除列的排序规则。

bin/console doctrine:migration:diff

向上

$this->addSql('ALTER TABLE session CHANGE sess_id sess_id VARCHAR(128) NOT NULL');

下载

$this->addSql('ALTER TABLE session CHANGE sess_id sess_id VARCHAR(128) NOT NULL COLLATE utf8_unicode_ci');

表格看起来像这样:
show create table session;    

CREATE TABLE session ( sess_id varchar(128) COLLATE utf8_unicode_ci NOT NULL, sess_data longblob NOT NULL, sess_time int(11) NOT NULL, sess_lifetime int(11) NOT NULL, PRIMARY KEY (sess_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
在添加排序规则后,实体如上所示。
<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Session
 *
 * @ORM\Table(name="session")
 * @ORM\Entity(repositoryClass="App\Repository\SessionRepository")
 */
class Session
{
    /**
     * @var string
     *
     * @ORM\Column(name="sess_id", type="string", length=128, options={"collation":"utf8_unicode_ci"})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="sess_data", type="blob")
     */
    private $sessData;

    /**
     * @var int
     *
     * @ORM\Column(name="sess_time", type="integer")
     */
    private $sessTime;

    /**
     * @var int
     *
     * @ORM\Column(name="sess_lifetime", type="integer")
     */
    private $sessLifetime;


    /**
     * Get id
     *
     * @return string
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Get sessData
     *
     * @return string
     */
    public function getSessData()
    {
        return $this->sessData;
    }

    /**
     * Set sessData
     *
     * @param string $sessData
     *
     * @return Session
     */
    public function setSessData($sessData)
    {
        $this->sessData = $sessData;

        return $this;
    }

    /**
     * Get sessTime
     *
     * @return int
     */
    public function getSessTime()
    {
        return $this->sessTime;
    }

    /**
     * Set sessTime
     *
     * @param integer $sessTime
     *
     * @return Session
     */
    public function setSessTime($sessTime)
    {
        $this->sessTime = $sessTime;

        return $this;
    }

    /**
     * Get sessLifetime
     *
     * @return int
     */
    public function getSessLifetime()
    {
        return $this->sessLifetime;
    }

    /**
     * Set sessLifetime
     *
     * @param integer $sessLifetime
     *
     * @return Session
     */
    public function setSessLifetime($sessLifetime)
    {
        $this->sessLifetime = $sessLifetime;

        return $this;
    }
}
3个回答

3

我遇到了类似的问题。

我使用的是:

  • Symfony=3.4.9 (flex)
    • doctrine/orm=^2.5.11
  • PHP=7.2.5
  • cURL=7.59.0
  • APCu=5.1.11
  • Xdebug=2.6.0
  • Composer=1.6.5
  • Nginx=1.14.0
  • MariaDB=10.2.14


解决方案:

为了解决我的问题,在config/packages/doctrine.yaml中,将属性server_version的值'mariadb-10.2.14'注释掉或设置它。


灵感来自:https://github.com/doctrine/dbal/issues/2985


2
非常感谢!很高兴解决了这个问题。只是为了以后参考,如果有人需要找到他们的MariaDB版本来设置这个值,只需执行SHOW VARIABLES LIKE“%version%”; - Element Zero
您还可以在终端中执行mysql -V以查看Mariadb版本。 - Yoann Kergall

0
这是因为您创建了一个类型为字符串的$id列,并使用@ORM\GeneratedValue(strategy="AUTO")。请移除:@ORM\GeneratedValue(strategy="AUTO")

0

尝试将此添加到列注释中:

/**
 * @var string
 *
 * @ORM\Column(options={"collation":"utf8_unicode_ci"})
 */
private $sess_id;

现在上下迁移完全相同 $this->addSql('ALTER TABLE session CHANGE sess_id sess_id VARCHAR(128) NOT NULL COLLATE utf8_unicode_ci'); - Margus Pala
你尝试运行过这个命令吗:doctrine:clear:metadata:cache - vpalade
清除缓存没有起作用。我甚至删除了整个var/cache文件夹。 - Margus Pala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接