在doctrine / symfony2中,TINYINT错误地转换为NULL而不是boolean

时间:2014-12-02 22:32:06

标签: php mysql symfony doctrine-orm doctrine

这是我见过的最疯狂的事情。 我的Symfony2和Doctrine已经疯了

我有几乎没有TINYINT字段的MySQL数据库。 那些不可为空,所有记录都将这些值设置为0或1.

所有学说ORM映射都正确设置(我将其复试了数百次)。 所有getter都设置正确(双重检查)。

然后 - 对于某些对象,它不起作用......某些TINYINT未正确转换为BOOLEAN(因为它适用于其他对象和其他字段那个enity)...相反它给出了NULL - 即使在数据库中这个TINYINT被设置为“1”(或“0” - 它也无关紧要)。

对于某些其他对象(同一实体),它可以正常工作TINYINT =“1”被正确识别为真,“0”被认为是假布尔值。

那些我的例子:

Events.orm.xml:

  <entity name="Events" table="events">
    <change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
    <field name="eventDeleted" type="boolean" column="_event_deleted"/>

实体:“Events.php”

映射:

/**
 * @var boolean $eventDeleted
 *
 * @ORM\Column(name="_event_deleted", type="boolean", nullable=false)
 */
private $eventDeleted;

和getter and setter:

/**
 * Set eventDeleted
 *
 * @param boolean $eventDeleted
 */
public function setEventDeleted($eventDeleted)
{
    $this->eventDeleted = $eventDeleted;
}

/**
 * Get eventDeleted
 *
 * @return boolean
 */
public function getEventDeleted()
{
    return $this->eventDeleted;
}

数据库是:

database view

正如我所说 - 对于某些对象,它可以正常工作,并在例如访问时给出“1”或“0”:

{{ event[0].getEventDeleted }}

有时会给出NULL。

我发现了一些在教义jira中提到的“类似”问题,但没有猜测是什么解决了这个问题,原因可能是:http://www.doctrine-project.org/jira/browse/DDC-1967

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试使用查询构建器“手动”创建查询 在从会话变量中获取实体时,我在symfony 2.1上也遇到了同样的问题,无论它具有什么值,布​​尔字段都返回null。使用查询构建器使它对我有用。

修改
示例:

$qb = $em->createQueryBuilder();  
$query = $qb->select('e.eventDeleted')  
    ->from('BundleName:Events', 'e')  
    ->where('e.id = :id')  
    ->setParameter('id', $id)  
    ->getQuery();  
$eventDeleted = $query->getSingleResult();