Symfony:仅包含数字的字符串将保留为数字,查询失败


Symfony: Strings containing only numbers persist as numbers, fail queries

我正在使用Symfony和Mongo。我有我每个蒙戈收藏的文件。在文档中,我将所有字段定义为字符串,即使其中一些字段通常包含数值。

我在这些集合中执行搜索并像这样过滤它们:

private function like($paramValue) {
    return new 'MongoRegex("/.*" . FilterHelper::castValue(FilterType::INT, $paramValue) . ".*/ix");
}
...
$qb->field('articleId')->equals( $this->like($params['articleCode']) );

但是,值在 mongo 中保留为数字,"article_id": NumberInt(197568) 。文档是这样写的:

/**
 * @MongoDB'String(name="article_id")
 */
protected $articleId; 

当然,查询会失败,因为类型不是预期的。我该如何解决这个问题?我不能假设$articleId是一个数字。

你想过 strval php 函数吗?

$qb->field('articleId')->equals( $this->like(strval($params['articleCode'])) );

当然,您应该先应用 strval 然后再将其传递给函数like()并验证返回的值