【问题标题】:new column not recognized in symfony2 Uncaught exception 'Doctrine\ORM\Query\QueryExceptionsymfony2 中未识别的新列未捕获的异常'Doctrine\ORM\Query\QueryException
【发布时间】:2017-08-09 08:05:27
【问题描述】:

我在我的项目中使用 symfony 2.4 和 postgresql。在我的语言环境中一切正常,但在服务器上却报错

 "PHP message: PHP Fatal error:  Uncaught exception 'Doctrine\ORM\Query\QueryException' with message 'SELECT p.id, p.username, p.email, p.isEmailConfirmed FROM CityDomGameBundle:Player p WHERE p.email = (:email) AND p.username != (:username)' in /var/...

这里发生错误

$duplicatedEmails = $em->createQueryBuilder()
                ->select('p.id, p.username, p.email, p.isEmailConfirmed')
                ->from('CityDomGameBundle:Player', 'p')
                ->where('p.email = (:email)')
                ->andWhere('p.username != (:username)')
                ->setParameter(':email', $email)
                ->setParameter(':username', $username)
                ->getQuery()
                ->getResult();

我在表中添加了新列 isEmailConfirmed,所以 symfony 似乎无法识别它。如果我从select 语句中删除p.isEmailConfirmed,它将起作用。

这里是实体代码

 /**
 * @var boolean $isEmailConfirmed
 *
 * @ORM\Column(name="isemailconfirmed", type="boolean")
 */
private $isEmailConfirmed;

和方法

 /**
 * @return boolean
 */
public function getIsEmailConfirmed()
{
    return $this->isEmailConfirmed;
}

/**
 * @param $isEmailConfirmed
 * @return $this
 */
public function setIsEmailConfirmed($isEmailConfirmed)
{
    $this->isEmailConfirmed = $isEmailConfirmed;

    return $this;
}

我尝试cache:clear,但没有帮助。有什么想法吗?

更新

运行 php app/console dictionary:schema:update --force 后显示错误

 [Doctrine\DBAL\Exception\NotNullConstraintViolationException]                                      
  An exception occurred while executing 'ALTER TABLE player ADD 
  isemailconfirmed BOOLEAN NOT NULL':  
  SQLSTATE[23502]: Not null violation: 7 ERROR:  column 
  "isemailconfirmed" contains null values 

[Doctrine\DBAL\Driver\PDOException]                                                            
 SQLSTATE[23502]: Not null violation: 7 ERROR:  column 
 "isemailconfirmed" contains null values

但此列的默认值为false 这是我添加列时的查询

alter table player add column isEmailConfirmed boolean default false;

【问题讨论】:

  • 您更新了服务器上的 schame 吗? bin/console 原则:schema:update --force ?
  • 您的isemailconfirmed 在您的数据库中吗?
  • @Alessandro Minoccheri 我现在就试试
  • @t-n-y 是的,是的
  • `执行“ALTER TABLE player ADD isemailconfirmed BOOLEAN NOT NULL”时发生异常:SQLSTATE[23502]:非空违规:7 错误:列“isemailconfirmed”包含空值`

标签: php postgresql symfony doctrine


【解决方案1】:

先更新当前表:

update player set isemailconfirmed = false where isemailconfirmed is null

或者像这样更改注释:

/**
 * @var boolean $isEmailConfirmed
 *
 * @ORM\Column(name="isemailconfirmed", type="boolean", nullable=true)
 */
private $isEmailConfirmed;

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2017-10-30
    • 2018-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多