2014-09-22 35 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