繁体   English   中英

Doctrine 存储库的 findBy 方法是否支持枚举?

[英]Does Doctrine repository's findBy method support Enums?

在使用 Doctrine 2.7.0 的 Symfony 6.0.8 项目中,我添加了一些枚举作为我的实体的字段类型(我遵循了本教程: https ://smaine-milianni.medium.com/use-php-enums-as -doctrine-type-in​​-symfony-85909aa0a19a ),一切正常。

让我烦恼的是,在我的存储库中,我可以使用这些字段过滤

$qb =  $this->createQueryBuilder('e');
$query = $qb->select("e")
    ->where('e.status = :status')
    ->setParameter('status', Status::STATUS_ACCEPTED)
    ;

return $query->getQuery()->getResult();

但不是这个

$criterias = array(
    "status" => Status::STATUS_ACCEPTED,
);
$repository->findBy($criterias);

添加->value也无济于事。 一旦我尝试使用枚举进行过滤,它就会返回一个空集。

有什么我想念的吗?

由于此代码setParameter起作用:

// \Doctrine\ORM\AbstractQuery::processParameterValue
if ($value instanceof BackedEnum) {
    return $value->value;
}

我不能确定为什么标准不能以这种方式工作,但我认为这是因为\Doctrine\ORM\Persisters\Entity\BasicEntityPersister::expandParameters这里)。 但奇怪的是,如果你尝试传递->value那将是 int|string,它应该可以正常工作。 请检查->value返回一个字符串,该字符串包含在数据库列中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM