Doctrine 迁移不会识别注释的更改(在生产中)
Doctrine migrations wont recognise changes to annotations (in production)
原题
下面的原因、注释和成员字段 @ORM\Column(type="string", length=20000)
不起作用,因为这对于 VARCHAR 来说太长了,所以我将它们全部更改为 @ORM\Column(type="text")
现在
我可能误解了在制作中处理迁移的正确方法,但我无法让我的数据库与我的实体相匹配。 运行 php bin/console doctrine:migrations:diff
或 php bin/console doctrine:schema:update --dump-sql
学说试图将数据库更新到旧版本的 Request.php 就像它已被缓存但即使在 运行 清除元数据之后迁移在我手动更改数据库后,所有人都说 VARCHAR(20000)
就像在这个 sql 转储中一样:
ALTER TABLE request CHANGE reasons reasons VARCHAR(20000) NOT NULL, CHANGE notes notes VARCHAR(20000) DEFAULT NULL, CHANGE members members VARCHAR(20000) NOT NULL;
当前Request.php
namespace App\Entity;
use App\Repository\RequestRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=RequestRepository::class)
*/
class Request
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="time")
* @Assert\LessThan(propertyPath="endTime", message="The booking must start before it ends")
*/
private $startTime;
/**
* @ORM\Column(type="time")
*/
private $endTime;
/**
* @ORM\Column(type="date")
*/
private $date;
/**
* @ORM\Column(type="text")
*/
private $reasons;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $notes;
/**
* @ORM\Column(type="text")
*/
private $status;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="requests")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
/**
* @ORM\Column(type="text")
*/
private $members;
我曾尝试删除 Request.php 实体,但随后学说对其消失感到不安。 (我在这里确实有一个与用户 table 的关系 link,但它是一对多的)。
更改成员原因和注释的名称有效,但当我改回名称时,它想将它们设置回 VARCHAR(20000)
。它在哪里保存此信息。我该如何摆脱它?
Doctrine 元数据已缓存。当您清除缓存(并将其预热)时,symfony 运行“编译器通道”,除其他外读取注释以构建元数据、代理对象、注册存储库,所有这些东西(显然还有其他与原则无关的东西) ).
运行 bin/console cache:clear
应该解决您的问题。 (它也应该是您部署过程的一部分。除非您也复制供应商目录,composer install
)。
原题
下面的原因、注释和成员字段 @ORM\Column(type="string", length=20000)
不起作用,因为这对于 VARCHAR 来说太长了,所以我将它们全部更改为 @ORM\Column(type="text")
现在
我可能误解了在制作中处理迁移的正确方法,但我无法让我的数据库与我的实体相匹配。 运行 php bin/console doctrine:migrations:diff
或 php bin/console doctrine:schema:update --dump-sql
学说试图将数据库更新到旧版本的 Request.php 就像它已被缓存但即使在 运行 清除元数据之后迁移在我手动更改数据库后,所有人都说 VARCHAR(20000)
就像在这个 sql 转储中一样:
ALTER TABLE request CHANGE reasons reasons VARCHAR(20000) NOT NULL, CHANGE notes notes VARCHAR(20000) DEFAULT NULL, CHANGE members members VARCHAR(20000) NOT NULL;
当前Request.php
namespace App\Entity;
use App\Repository\RequestRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=RequestRepository::class)
*/
class Request
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="time")
* @Assert\LessThan(propertyPath="endTime", message="The booking must start before it ends")
*/
private $startTime;
/**
* @ORM\Column(type="time")
*/
private $endTime;
/**
* @ORM\Column(type="date")
*/
private $date;
/**
* @ORM\Column(type="text")
*/
private $reasons;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $notes;
/**
* @ORM\Column(type="text")
*/
private $status;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="requests")
* @ORM\JoinColumn(nullable=true)
*/
private $user;
/**
* @ORM\Column(type="text")
*/
private $members;
我曾尝试删除 Request.php 实体,但随后学说对其消失感到不安。 (我在这里确实有一个与用户 table 的关系 link,但它是一对多的)。
更改成员原因和注释的名称有效,但当我改回名称时,它想将它们设置回 VARCHAR(20000)
。它在哪里保存此信息。我该如何摆脱它?
Doctrine 元数据已缓存。当您清除缓存(并将其预热)时,symfony 运行“编译器通道”,除其他外读取注释以构建元数据、代理对象、注册存储库,所有这些东西(显然还有其他与原则无关的东西) ).
运行 bin/console cache:clear
应该解决您的问题。 (它也应该是您部署过程的一部分。除非您也复制供应商目录,composer install
)。