2014-09-22 37 views
0

我正在使用Symfony和Mongo。我有我的每个mongo藏品的文件。在文档中,我将所有字段定义为字符串,即使其中一些字段通常包含数字值。Symfony:只包含数字的字符串保持为数字,失败查询

我在这些集合执行搜索和过滤它们是这样的:

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

但是,在数据持久化在蒙戈数字,"article_id": NumberInt(197568)。该文档是这样写的:

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

自然,查询失败,因为类型不是预期的。我怎样才能解决这个问题?我不能假设$articleId是一个数字。

回答

0

您是否想过使用PHP函数strval

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

当然,你应该申请strval之前把它传递like()功能,并验证返回值

+0

我不知道我跟随。 Strval返回字符串值,但mongo仍然包含数值,并且过滤器仍然失败。 – ecc 2014-09-22 15:01:59

+0

所以使用intval()函数。也许我理解相反:) – DonCallisto 2014-09-22 15:26:48

+0

那么,大多数情况下,这将工作,但问题是如何Mongo假设数字字符串的数字类型,但字符串类型的非数字字符串,有时会发生... – ecc 2014-09-22 16:11:48